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.

Image non trouvée !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.

Image non trouvée !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.

Image non trouvée !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.

Image non trouvée !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.

Image non trouvée !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.

Image non trouvée !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 !

Image non trouvée !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.