635.1 / PROGRAMMATION Accès à la base de données 1. Base de données Base SQLite intégrée à Android – voir www.sqlite.com. Une base de données SQLite est intégralement stockée dans un seul fichier. Une base de données n’est accessible que par l’application qui la crée ; l’accès par d’autres applications peut être implanté par la création de fournisseurs de contenu ou de services. La base de données est stockée dans : /data/data/<package>/databases/<nom base> Exemple : /data/data/pd.a14.base.bd/databases/GestionBD.db Il est possible d’examiner une base de données en mode de commande en démarrant un shell sur l’émulateur : adb shell ; la base de données peut ensuite être examinée au moyen de l’outil sqlite3 : sqlite3 <chemin complet base>. Voir aussi la documentation : http://developer.android.com/tools/help/adb.html#sqlite. Le plug‐in SQLite Manager pour FireFox permet de gérer une base SQLite. Pour employer cet outil, vous devez d’abord recopier le fichier sous Windows au moyen de la commande : adb pull <chemin complet base> <chemin complet windows>. Le plug‐in CellObject SQLite pour Eclipse permet d’examiner le contenu d’une base de l’émulateur : http://campus.hesge.ch/Daehne/Software/CellObjectSQLite/net.cellobject.sqlitexmlbrowser_1.2.0.zip Remarque : aucune de ces trois stratégies ne peut être appliquée à un téléphone qui n’est pas rooté (mais elle peuvent bien sûr être appliquées avec l’émulateur). 2. Illustration On gère une base de données de prêt de BD dont voici le modèle physique : La création et la mise à jour d’une base de données sont gérées par une classe dérivée de android.database.sqlite.SQLiteOpenHelper. Il s’agit d’une classe abstraite avec la plupart de ses méthodes implantées pour laquelle il faut définir les méthodes abstraites : - onCreate() : appelée par la système lorsque la base n’existe pas. - onUpgrade() : appelée par le système lorsque la version de la base a changé. On crée une instance de cette classe et on appelle : - getWritableDatabase() : ouverture de la base en lecture / écriture. - getReadableDatabase() : ouverture de la base en lecture seule. - close() : fermeture de la base. Ces méthodes retournent une instance de la classe qui modélise la base de données : - android.database.sqlite.SQLiteDatabase. Peter Daehne 1 / 2 Version 1.9 – 18.11.2014 3. Architecture et méthodes Les méthodes rawQuery() et execSQL() de SQLiteDataBase permettent d’envoyer n’importe quelle requête SQL exprimée sous la forme d’un String à la base de données. Pour les requêtes du CRUD, il faut leur préférer les méthodes insert(), query(), update() et delete() qui forment une couche d’abstraction au‐dessus du SQL et pour lesquelles il n’y a donc aucun risque qu’une erreur de syntaxe SQL ne se produise. Peter Daehne 2 / 2 Version 1.9 – 18.11.2014