Les accès aux données sous Android peuvent être réalisés de plusieurs façons. Les fichiers, privés ou non, les accès réseaux, propriétaires ou via le Cloud… et la base de données SQL.
La base de données SQLite est disponible sous Android, et via quelques classes, nous avons tous les outils pour créer, écrire et lire la base.
La création de la base et sa mise à jour
Pour créer la base de données, mieux vaut utiliser les outils qui existent… et pour cela dériver la classe SQLiteOpenHelper. Vous aurez à compléter deux hook : la création, la mise à jour. Lors de la création, il faudra créer les tables, pour la mise à jour, le plus simple (oui oui) sera de supprimer les tables et de les recréer.
Dans l’exemple de code suivant, des constantes statiques représentent les noms des base, tables et colonnes, version . Les noms des colonnes sont publiques, ce qui facilitera leur usage.
public class DataHelper extends SQLiteOpenHelper{ public static final String NOM="nom"; public static final String ADRESSE="adresse"; private static final String DATABASE_NAME="appdatas"; private static final int DATABASE_VERSION=1; private static final String CLIENT_TABLE_NAME="clients"; private static final String CLIENT_TABLE_CREATE = "CREATE TABLE "+CLIENT_TABLE_NAME+ "("+NOM+" TEXT, "+ADRESSE+" TEXT);"; public DataHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CLIENT_TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS "+CLIENT_TABLE_NAME); onCreate(db); } }L’insertion des données La première chose à faire sera de créer un objet du type SQLiteOpenHelper. Attention, comme vous avez créé votre propre classe dérivée, ce sera cette classe à qu’il faudra utiliser.
DataHelper db = new DataHelper(this);Pour insérer des données, il y a plusieurs façons de pratiquer. Il est possible d’utiliser des méthodes toutes faites ! Il faudra auparavant ouvrir une connexion à la base en utilisant getWritableDatabase(). Une fois l’insertion réalisée, vous obtenez en retour le nombre d’enregistrement inséré, ou bien -1 pour signaler un échec. Dans l’exemple suivant, l’insertion est faite via la méthode insert(…) en fournissant les données sous la forme de tableau associatif appelé ici ContentValues. La fermeture de la connexion n’est pas oubliée.
SQLiteDatabase base = db.getWritableDatabase(); ContentValues ct= new ContentValues(); ct.put(DataHelper.NOM,"Rasori Ets"); ct.put(DataHelper.ADRESSE,"Saint-Georges-sur-Eure"); base.insert("clients", null, ct); ct= new ContentValues(); ct.put(DataHelper.NOM,"Alphorm"); ct.put(DataHelper.ADRESSE,"Créteil"); base.insert("clients", null, ct); base.close();La récupération des données Pour lire les tables, le chemin inverse doit être réalisé. Tout d’abord ouvrir une connexion en lecture. Pour faire une requête. Vous pouvez faire la requête en utilisant directement du SQL, ou bien passer par les méthodes « aidantes » comme query(…). Le résultat est un Cursor, c’est-à-dire un accès aux données de résultat. Une sorte d’itérateur sur resultset. Il faut alors se positionner sur le premier enregistrement, puis avancer tant que vrai. Dans le code suivant, vous voyez que le résultat sert à alimenter un ArrayAdapter, car les ligne sont affichées dans une ListView. Le code xml qui suit est celui de l’interface graphique.
ListView liste = (ListView)findViewById(R.id.liste); ArrayAdapter donnees = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1); SQLiteDatabase base = db.getReadableDatabase(); Cursor clients = base.query("clients", new String[]{DataHelper.NOM,DataHelper.ADRESSE}, null,null,null,null,null); if(clients.moveToFirst()) do { String str = clients.getString(0)+ " -> "+clients.getString(1); donnees.add(str); }while(clients.moveToNext()); liste.setAdapter(donnees); base.close();L’interface graphique correspond à :
<code> <button></button> <button></button> </code>Conclusion Sous Android, il est possible de penser les données façon base de données relationnelle. Pour cela, utilisez SQLite et gérer vos connexions, vos insertions, et requêtes avec SQL.