Mise en place de la base SQLite - ListViewJson
ListViewJson 10/08/2013 0

Mise en place de la base SQLite - ListViewJson

On va voir maintenant la mise en place de la base de donnée interne de l'application de la class java, à la datasource en passant par le SQLiteOpenHelper.

La classe Contact

La classe contact contiendra tout les champs de notre base de donnée SQLite. Elle se crée comme une classe Java classique :

com.androiddev.listviewjson/Contact.java

Rien de bien compliqué : on crée nos attributs avec leurs getter/setter ainsi que la fonction toString().

 

SQLiteOpenHelper

On doit ensuite crée notre classe qui étend SQLiteOpenHelper. Son objectif est de gérer la création et la mise à jour de la structure de la base de donnée mais aussi la liaison avec la classe contact et le datasource que l'on créera ensuite.

com.androiddev.listviewjson/MySQLiteHelper.java

Implémenter la classe SQLiteOpenHelper impose d'utiliser le constructeur, et les fonctions onCreate et onUpgrade. On déclare aussi tout nos champs de base de donnée, on donne un nom de fichier, un numéro de version mais aussi la requête de création de la base de donnée.

Le constructeur, à travers de la méthode super, appelle soit la faction onCreate ou onUpgrade au cas où la BDD n'existe pas ou n'est pas à jour.

 

ContactsDataSource

La classe ContactsDataSource est une classe Java qui va s'occuper de toute les opérations CRUD (lecture, écriture, mise à jour et suppression) sur notre BDD.

On créer tout d'abord notre classe ContactsDataSource.java dans le package com.androiddev.listviewjson :

On place tout les imports qui nous seront nécessaire, ainsi que des attributs. Trois attributs dont le premier qui est une instance de SQLiteDatabase, utiliser pour réaliser des requête. Le deuxième est simplement une instance de notre classe créée précédement, MySQLiteHelper et le troisième est un tableau de chaîne de caractère qui contient tout les champs qui nous seront utile.

Ensuite dans le constructeur on créer notre dbHelper qui est un objet MySQLiteHelper  en lui passant le context en paramètre.

Puis on créer deux fonctions open et close qui auront pour objectif d'ouvrir en écriture et de fermer la connexion à la base de donnée.

 

Création d'un contact

On place maintenant notre fonction de création de Contact (qui correspond à l'insertion de celui-ci dans la base de donnée).

ContactsDataSource.java

Cette fonction createContact appel dés le départ une autre fonction (existContactWithId) dont le but est de vérifier si le contact existe déjà. Si c'est le cas on appel la fonction de mise à jour (updateContact). Sinon on réalise l'insertion.

  1. L'insertion se réalise en utilisant un objet de type ContentValues. C'est un objet fournit par le SDK Android qui est totalement personnalisable. C'est à dire qu'a la base il est vide mais qu'on peut lui ajouté les attributs que l'on souhaite :
    values.put(MySQLiteHelper.COLUMN_NOM, nom);
    values étant notre ContentValues, on lui ajoute un attribut aillant le nom de la COLUMN_NOM de la BDD ('nom') avec en valeur le nom du contact à insérer.
  2. Ensuite on exécute la requète d'insertion avec database.insert qui prend en paramètre le nom de la table, la valeur par défaut et le ContentValues. Cette fonction retourne l'ID de la ligne insérer.
  3. Avec l'id retourné on recherche dans la BDD le Contact pour ensuite le retourné. A noté que query retourne un Cursor donc il faut le convertir en objet Contact, c'est l'objectif de la fonction cursorToContact.

 

Mise à jour d'un contact

La fonction de  mise à jour sera plus simple.

ContactsDataSource.java

updateContact prend en paramètre l'ID de l'enregistrement a modifié de la BDD et le Contact à mettre à jour.

  1. Cette fonction va comme pour l'insertion, utilisé un ContentValues.
  2. Ensuite on exécute la requète de mise à jour database.update qui prend en paramètre le nom de la table, le ContentValues, la condition Where et les valeurs de paramètre Where si nécessaire.
  3. On returne le Contact modifié avec la fonction que l'on créera ultérieurement getContactWithId.

 

Récupérer un contact

On passe maintenant à la fonction de récupération d'un Contact avec un id.

ContactsDataSource.java

  1. On fait la requête sur la base de donnée SQLite avec database.query qui prend en paramètre le nom de la table, les colonnes à retourner, le filtre (Where), les valeurs de paramètres du filtre si nécessaire, le groupement (group by), un filtre (having), le trie (order by) et la limite (limit).
  2. La requête retourne un Cursor que l'on place sur le premier résultat (obligatoire sinon ne retourne rien)
  3. On convertie le Cursor en Contact, on ferme le Cursor et on retourne le Contact.

 

Test d'existance de contact

Une fonction simple qui vérifie l'existence ou non d'un contact.

ContactsDataSource.java

Cette fonction est à peu près la même que la précedente, la différence est que l'on compte le nombre de résultat et qu'on retourne false si aucune ligne ou true pour l'inverse.

 

Supprimer un contact

Encore une fonction simple mais qui supprimer un contact.

ContactsDataSource.java

Pour la suppression on utilise database.delete qui prend en paramètre le nom de la table, la clause Where et les valeurs pour les paramètres de la clause Where si nécessaire.

 

Récupération de tout les contacts

Une fonction qui nous servira à lister tout les contacts enregistrés dans la BDD.

ContactsDataSource.java

  1. On créer la liste de Contact que l'on retournera.
  2. On fait la requête database.query comme réalisé pour récupérer un seul contact mais sans clause Where.
  3. On plasse le Cursor sur la première ligne de résultat et on boucle sur toutes les lignes en convertissant le Cursor en Contact pour ensuite l'ajouter dans la liste créer précedemment.
  4. On ferme le Cursor et on retourne la liste.

 

Conversion de Cursor en Contact

La fonction cursorToContact convertira le Cursor en Contact.

ContactsDataSource.java

  1. Pour convertir un Cursor en Contact, on crée d'abord un Contact vide.
  2. On lui attributs les valeurs du Cursor en prenant en compte le type de la valeur : getLong, getString, getInt, ...
  3. Le Cursor est un tableau de valeur dont les colonnes correspondent à celle que l'on a demandé dans nos requête database.query.
  4. On retourne le Contact.