SQLiteOpenHelper
Classe utilitaire qui va permettre gérer la connexion, création, évolution suivant les versions de votre programme d'une base de données.
public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Constructeur dans lequel sera passé les informations qui seront nécessaires pour créer/modifier notre base - cette méthode ne fera rien de particulier:
- context: le contexte (votre activité)
- name: le nom du fichier qui contient la base de données, ou null pour une base de donnée en mémoire ce qui permet d'avoir des tables temporaires (donc perdu lors de l'arrêt de celle-ci).
- factory à utiliser pour crééer les curseurs, ou null par défaut.
- version de la base de données (commençant à 1). Si la version de la base ne correspond pas à celle indiquée, lors de la demande d'un identifiant à la base, onUpgrade(SQLiteDatabase, int, int) sera lancée afin de mettre à jour la base ainsi que onDowngrade(SQLiteDatabase, int, int) pour les versions android à partir de 11.
La base ne sera
ni créée, ni ouverte suite à l'appel à cette méthode.
public SQLiteDatabase getReadableDatabase ()
Cette méthode permet de récupérer un identifiant qui sera utilisé pour accéder à la base de données en lecture seul.
Elle retournera une exception SQLiteException en cas de problème.
Il est fortement
déconseillé d'utiliser cette méthode dans un UI
Thread (y compris en passant pas un ContentProvider),
car celle-ci peut-être potentiellement lente à rendre la main (risque
de d'ANR). En effet, si la base de données
n'est pas encore créée, c'est maintenant que les méthodes
onCreate/onUpdate seront lancées.
Cet identifiant
sera valide jusqu'au prochain appel aux méthodes public SQLiteDatabase
getWritableDatabase () ou close().
public SQLiteDatabase getWritableDatabase ()
Cette méthode permet de récupérer un identifiant qui sera utilisé pour accéder à la base de données en lecture ou en écriture.
Elle retournera une exception SQLiteException en cas de problème.
Il est fortement
déconseillé d'utiliser cette méthode dans un UI
Thread, car celle-ci peut-être potentiellement lente à rendre
la main (risque de d'ANR). En effet, si la base
de données n'est pas encore créée, c'est maintenant que
les méthodes onCreate/onUpdate seront lancées.
Cet identifiant
sera valide jusqu'au prochain appel à la méthode close().
public abstract void onCreate (SQLiteDatabase db)
Cette méthode pourra être déclenchée suite à un appel à getReadableDatabase () ou getWritableDatabase ().
Appelé la première fois pour créer une base de données.
Cest donc ici qu'il faudra créer les tables/données initiales.
En entrée:
db L'identifiant de la base de données.
public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)
Cette méthode pourra être déclenchée suite à un appel à getReadableDatabase () ou getWritableDatabase ().
Cette méthode est déclenchée lorsqu'il y a nécessité de mettre à jour la base. Il y a gestion d'une transaction qui sera défaite à la moindre erreur rencontrée durant l'exécution du code de cette méthode. Remettant la base dans son état initial.
En entrée:
db pour l'identifiant de la base.
oldVersion Ancienne version de la base de données.
newVersion Nouvelle version de la base de données.
Comme indiqué sur le site du développeur android, voir http://sqlite.org/lang_altertable.html pour des explications sur alter table.
Cette méthode
n'est pas déclenchée pour une base de données en mémoire,
car il n'y a pas de raison d'y avoir des changements dedans !
public void onOpen (SQLiteDatabase db)
Cette méthode sera déclenchée suite à un appel à getReadableDatabase () ou getWritableDatabase ().
Déclenchée à l'ouverture d'une base de données. Il sera important de tester isReadOnly() avant de chercher à mettre à jour éventuellement la base puisque celle-ci pourra être ouverte en lecture seule !
Cette méthode
sera appelée après création/modification ou downgrade (dont
je ne parle pas ici) de la base.
En entrée:
db pour l'identifiant de la base.
Fermeture de la base
Il suffit d'utiliser la méthode close().
Exemple de code
Ce code est vraiment très basique (il ne fait rien hormis créer une database !). Il est juste là pour voir ce qui se déclenche lors des différents appels aux méthodes de SqLiteOpenHelper.
Il n'est absolument pas à reproduire, car tout ce fait dans le thread UI, ce qu'il ne faudrait surtout pas faire !
La base de données se nomme MyDB. Vous pouvez remplacer son nom par null pour faire des essais en mémoire.
Exemple plus poussé ici !
Opérations sur les tables/enregistrements
Ce n'est plus le rôle de cette classe, mais à SQLite...
Annexe
Plus d'explications sur le site du développeur android.