exemple détaillé-SQLite
exemple détaillé-SQLite
exemple détaillé-SQLite
Android
Objectifs
• Dans ce tutoriel, vous allez enregistrer les données dans la base de données SQLite à
l'aide d'un exemple simple et effectuer quelques opérations de base (CRUD) de SQLite.
o C: Create
o R: Read
o U: Update
o D: Delete
• Vous apprendrez à utiliser le modèle MVC (Modèle- Vue- Contrôleur). Vous allez séparer
votre projet en packages de modèles, vues et controleurs afin de mieux structurer le
projet
• Vous découvrirez le LayoutInflater et son utilization
• Vous découvrirez l'élément ScrollView
• Vous allez créer une vue (ex: TextView) par programme en utilisant java
• Vous apprendrez à utiliser AlertDialog
Introduction
SQLite est une base de données légère qui est déjà intégrée au framework Android. C'est une
base de données open source qui ne prend que 250 Ko de mémoire au moment de l'exécution.
La base de données SQLite prend en charge un nombre limité de types de données. Ces types
de données sont:
• Text
• Integer
• Real
• BLOB
Ainsi, tous les autres types de données doivent être convertis dans les types de données ci-
dessus avant de les insérer dans la base de données. SQLite prend en charge les fonctionnalités
1
de base de données relationnelles standard telles que la syntaxe SQL, les transactions et la
syntaxe préparée.
Dans cet exemple, nous allons utiliser les opérations suivantes de SQLite:
2
Créer une base de données
Créez ensuite une nouvelle classe nommée SQLiteHelper et étendez-la avec la classe
SQLiteOpenHelper. SQLiteOpenHelper est une classe d'assistance qui gère la création et la
gestion de versions de la base de données SQLite dans Android. Ainsi, dans la classe
SQLiteHelper, nous allons implémenter les méthodes onCreate (), onUpgrade () et onOpen ()
de la classe SQLiteOpenHelper pour créer la table pour notre application.
Nous allons créer une table d'étudiants avec trois colonnes: ID de type entier, Nom du type
texte et groupe du type texte.
3
4
Dans le code ci-dessus, nous avons créé une table de base de données pour stocker les
informations des etudiants. Ici, nous récupérons l'instance SQLiteDatabase et créons une
nouvelle table de base de données à l'aide de la méthode onCreate () de notre classe
d'assistance. Maintenant, nous pouvons créer les méthodes pour effectuer diverses opérations
liées à la base de données.
Créez deux packages, respectivement Managers et Views. Déplacez la classe MainActivity vers
le package Views et la classe SQLiteHelper vers le package Managers
5
Créer un modèle d'étudiants
Créez un nouveau package "Models". Sous ce package, créez une nouvelle classe “Student”.
La classe Student sera utilisée pour instancier des objets student que nous utiliserons pour
insérer et extraire des données de la base de données.
6
Insérer des informations dans la base de données
Pour insérer les données dans la table de base de données, nous avons besoin d'un accès en
écriture à notre base de données. Dans la classe "StudentHandler" nouvellement créée, nous
devons créer une nouvelle instance de notre classe SQLiteHelper pour obtenir l'instance de
base de données.
Ensuite, nous devons créer une méthode qui effectuera l’opération d’insertion. Donc,
commencez par obtenir l'accès en écriture à notre base de données en utilisant:
SQLiteDatabase db = dbHelper.getWritableDatabase();
7
Ensuite, créez un objet ContentValues et ajoutez les informations à l’objet à insérer.
ContentValues est essentiellement une classe utilisée pour stocker l'ensemble de valeurs
pouvant être traitées par ContentResolver.
Enfin, à l'aide de la méthode insert () de l'instance de base de données, ajoutez les valeurs à la
table souhaitée. Nous devons passer le nom de la table de base de données et l'objet
ContentValues en tant qu'arguments pour la méthode insert(). Fermez également l’accès à la
base de données une fois l’insertion terminée.
SQLiteDatabase db = dbHelper.getReadableDatabase();
8
Ensuite, nous utiliserons la méthode query() pour implémenter la condition et récupérer les
données de la table. Il retourne un objet Cursor à travers lequel nous pouvons itérer l'ensemble
des résultats. Voici l'exemple de méthode pour récupérer les données en fonction d'une
condition:
Pour récupérer les informations complètes présentes dans la table de base de données, nous
avons besoin d'un accès en écriture à notre instance de base de données. Cela ressemble plus à
une requête SQL où nous sélectionnons toutes les données de la table. Pour effectuer cette
opération, nous allons utiliser la méthode rawQuery() d'instance de base de données. Il
renverra un objet Cursor que nous utiliserons pour extraire l'ensemble des résultats. Voici
l'exemple de code permettant de récupérer les données:
9
public List<Student> getAllStudents() {
SQLiteDatabase db = dbHelper.getWritableDatabase();
List<Student> studentList = new ArrayList<Student>();
String selectQuery = "SELECT * FROM " + dbHelper.TABLE_STUDENTS;
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Student student = new Student(Integer.parseInt(cursor.getString(0)),
cursor.getString(1),cursor.getString(2));
studentList.add(student);
} while (cursor.moveToNext());
}
return studentList;
}
10
Supprimer des informations de la base de données
Pour supprimer des entrées de la table de base de données, nous devons définir un critère de
sélection pour identifier les entrées à supprimer. Nous allons donc utiliser la méthode delete()
de la base de données qui nécessite trois arguments:
Combinés, ces arguments créeront une requête de suppression qui fonctionnera exactement
de la même manière qu'une requête SQL. Voici l'exemple de code pour supprimer les données
de la table:
public void deleteStudent(Student student) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(dbHelper.TABLE_STUDENTS, dbHelper.KEY_ID + " = ?",
new String[] { String.valueOf(student.getId()) });
db.close();
}
11
Nous avons maintenant terminé avec les packages Managers et Models dans lesquels nous
avons créé les opérations de base de données. Nous allons maintenant créer les vues.
12
Nous allons définir le OnClickListener du bouton “Créer un étudiant”.
Faites un clic droit sur le package “Views”, créez une nouvelle classe
"OnClickListenerCreateStudent" et insérez le code suivant:
13
Préparez le formulaire de saisie d’un etudiant.
Faites un clic droit sur res/layout / è Cliquez sur "New" è Cliquez sur "File"> Nommez-le
"student_input_form.xml".
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:id="@+id/editTextStudentname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:hint="Nom de l'etudiant"
android:singleLine="true" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editTextStudentGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/editTextStudentname"
android:hint="Groupe de l'etudiant"
android:singleLine="true" />
</RelativeLayout>
14
Montrer le formulaire “créer un étudiant” à l'utilisateur
Retournez et ouvrez votre classe “OnClickListenerCreateStudent.java”.
Ajoutez le code suivant à votre classe (sous la fonction onClick (View view)) pour ouvrir le
dialogue “Créer un etudiant”.
new AlertDialog.Builder(context)
.setView(formElementsView)
.setTitle("Cree un etudiant")
.setPositiveButton("Ajouter",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).show();
15
Remarque:
LayoutInflater classe est utilisée pour instancier le fichier XML de mise en page dans les objets
View correspondants.
En d'autres termes, il prend en entrée un fichier XML et construit les objets View à partir de
celui-ci.
Inflater signifie lire le fichier XML qui décrit une mise en page (ou élément GUI) et créer les
objets réels qui lui correspondent, et ainsi rendre l'objet visible dans une application Android.
Si vous exécutez l'application après avoir ajouté le code ci-dessus. Après avoir appuyé sur le
bouton "Créer un étudiant", vous devriez obtenir le résultat ci-dessous:
16
Enregistrer la saisie de l'utilisateur
Ouvrez la classe OnClickListenerCreateStudent. Dans la méthode onClick() de AlertDialog, nous
enregistrerons les informations de l'étudiant.
En utilisant la classe StudentHandler déjà créée dans le package Managers, nous allons
enregistrer les informations insérées
new AlertDialog.Builder(context)
.setView(formElementsView)
.setTitle("Cree un etudiant")
.setPositiveButton("Ajouter",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Student student=new Student();
String studentName = editTextStudentname.getText().toString();
String studentGroup =
editTextStudentGroup.getText().toString();
student.setName(studentName);
student.setGroup(studentGroup);
dialog.cancel();
}
}).show();
17
Compter les enregistrements de la base de données Android
SQLite
Dans votre res/layout/activity_main.xml, placez un TextView sous votre bouton "Créer un
étudiant".
18
Maintenant, nous voulons créer la méthode count dans la classe Managers/StudentHandler.
Ouvrez la classe StudentHandler et ajoutez la méthode ci-dessous:
19
Ouvrez la classe MainActivity, créez la méthode countRecords() et appelez-la dans onCreate()
Nous voulons également afficher le nombre d'étudiants dans la base de données après avoir
enregistré un nouvel étudiant. Ouvrez la classe OnClickListenerCreateStudent et ajoutez la
methode countRecords après avoir créé un nouvel étudiant pour actualiser la valeur TextView.
20
new AlertDialog.Builder(context)
.setView(formElementsView)
.setTitle("Cree un etudiant")
.setPositiveButton("Ajouter",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Student student=new Student();
String studentName = editTextStudentname.getText().toString();
String studentGroup =
editTextStudentGroup.getText().toString();
student.setName(studentName);
student.setGroup(studentGroup);
}).show();
21
Exécutez votre application et essayez de créer un nouvel étudiant. Lorsque l'application est
créée pour la première fois, elle affiche le texte "0 enregistrements trouvés". Après avoir créé
un nouvel étudiant, elle affichera "1 enregistrements trouvés"
22
Lire des enregistrements de la base de données SQLite
Ouvrez le fichier res/layout/activity_main.xml et placez un ScrollView avec un LinearLayout à
l'intérieur sous le TextView “textViewRecordCount”.
23
Dans votre MainActivity.java, créez la méthode readRecords(). Cela affichera les
enregistrements de la base de données sur l'interface utilisateur.
if (students.size() > 0) {
int id = obj.getId();
String studentName = obj.getName();
String studentgroup = obj.getGroup();
else {
24
Nous allons maintenant créer de la même manière la méthode readRecords() dans la classe
OnClickListenerCreateStudent lorsque nous créons un nouvel étudiant afin d’actualiser le
contenu du ScrollView.
25
public void readRecords(Context context,View view) {
if (students.size() > 0) {
int id = obj.getId();
String studentName = obj.getName();
String studentgroup = obj.getGroup();
else {
26
new AlertDialog.Builder(context)
.setView(formElementsView)
.setTitle("Cree un etudiant")
.setPositiveButton("Ajouter",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Student student=new Student();
String studentName = editTextStudentname.getText().toString();
String studentGroup =
editTextStudentGroup.getText().toString();
student.setName(studentName);
student.setGroup(studentGroup);
}).show();
27
28
Maintenant, lancez l'application et essayez de créer de nouveaux étudiants. La liste des
étudiants doit apparaître comme dans l'image ci-dessous:
29
Définissez OnLongClickListener pour chacun des enregistrements à afficher. Accédez à votre
méthode MainActivity.java è readRecords (), dans la boucle ‘for’, placez le code suivant sous
textViewStudentItem.setTag (Integer.toString (id));
Pour tester le code ci-dessus, lancez l'application et appuyez longuement sur un étudiant
TextView. Le dialogue ci-dessous devrait apparaître:
30
Dans la méthode onClick() de l’AlertDialog , dans la méthode onLongClick (view) de la classe
OnLongClickListenerStudentRecord, insérez le code suivant. “Modifier” a un index de 0.
@Override
public boolean onLongClick(final View view) {
context = view.getContext();
id = view.getTag().toString();
return false;
}
Nous voulons créer la méthode editRecord dans laquelle nous permettons à l'utilisateur de
modifier les informations d'un étudiant et d'effectuer une opération de mise à jour.
31
public void editRecord(final int studentId,final View view) {
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View formElementsView = inflater.inflate(R.layout.student_input_form, null,
false);
editTextStudentname.setText(student.getName());
editTextStudentGroup.setText(student.getGroup());
new AlertDialog.Builder(context)
.setView(formElementsView)
.setTitle("Mettre à jour les informations")
.setPositiveButton("Sauvegarder",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Student objectStudent = new Student();
objectStudent.setId(studentId);
objectStudent.setName(editTextStudentname.getText().toString());
objectStudent.setGroup(editTextStudentGroup.getText().toString());
int updatedStudent=new
StudentHandler(context).updateStudent(objectStudent);
}).show();
Enfin, ajoutez les méthodes countRecords et readRecords (les mêmes que celles créées dans la
classe OnClickListenerCreateStudent) à la classe OnLongClickListenerStudentRecord et appelez-
les dans la méthode editRecord afin de mettre à jour l'interface graphique après une opération
de mise à jour.
32
public void countRecords(Context context,View view) {
int studentCount = new StudentHandler(context).count();
TextView textViewRecordCount = (TextView)
view.getRootView().findViewById(R.id.textViewRecordCount);
textViewRecordCount.setText(studentCount + " enregistrements trouves.");
}
if (students.size() > 0) {
int id = obj.getId();
String studentName = obj.getName();
String studentgroup = obj.getGroup();
else {
33
34
Maintenant, testez votre application et assurez-vous que l'opération de mise à jour fonctionne
correctement.
35
Supprimer un enregistrement dans Android SQLite
Accédez à votre méthode OnLongClickListenerStudentRecord.java è onLongClick () è dans
la méthode AlertDialog onClick (). Mettez le code suivant après la première instruction if:
@Override
public boolean onLongClick(final View view) {
context = view.getContext();
id = view.getTag().toString();
return false;
}
36
Lancez l'application et effectuez l'opération de suppression.
37