Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
220 L’art du développement Android
Vous pouvez, par exemple, utiliser le code suivant :
db.execSQL("CREATE TABLE
constantes (_id INTEGER PRIMARY KEY AUTOINCREMENT,
titre TEXT, valeur REAL);");
Cet appel crée une table constantes avec une colonne de clé primaire _id qui est un
entier incrémenté automatiquement (SQLite lui affectera une valeur pour vous lorsque
vous insérerez les lignes). Cette table contient également deux colonnes de données :
titre (un texte) et valeur (un nombre réel). SQLite créera automatiquement un index sur
la colonne de clé primaire – si vous le souhaitez, vous pouvez en ajouter d’autres à l’aide
d’instructions CREATE INDEX.
Le plus souvent, vous créerez les tables et les index dès la création de la base de données
ou, éventuellement, lorsqu’elle devra être mise à jour suite à une nouvelle version de votre
application. Si les schémas des tables ne changent pas, les tables et les index n’ont pas
besoin d’être supprimés mais, si vous devez le faire, il suffit d’utiliser execSQL() afin
d’exécuter les instructions DROP INDEX et DROP TABLE.
Ajouter des données
Lorsque l’on crée une base de données et une ou plusieurs tables, c’est généralement pour
y placer des données. Pour ce faire, il existe principalement deux approches.
Vous pouvez encore utiliser execSQL(), comme vous l’avez fait pour créer les tables.
Cette méthode permet en effet d’exécuter n’importe quelle instruction SQL qui ne renvoie
pas de résultat, ce qui est le cas d’INSERT, UPDATE, DELETE, etc. Vous pourriez donc
utiliser ce code :
db.execSQL("INSERT INTO widgets (name, inventory)"+
"VALUES (’Sprocket’, 5)");
Une autre solution consiste à utiliser insert(), update() et delete() sur l’objet SQLiteDatabase. Ces méthodes utilisent des objets ContentValues qui implémentent une interface ressemblant à Map mais avec des méthodes supplémentaires pour prendre en compte
les types de SQLite : outre get(), qui permet de récupérer une valeur par sa clé, vous
disposez également de getAsInteger(), getAsString(), etc.
La méthode insert() prend en paramètre le nom de la table, celui d’une colonne pour
l’astuce de la colonne nulle et un objet ContentValues contenant les valeurs que vous
voulez placer dans cette ligne. L’astuce de la colonne nulle est utilisée dans le cas où
l’instance de ContentValues est vide – la colonne indiquée pour cette astuce recevra alors
explicitement la valeur NULL dans l’instruction INSERT produite par insert().
ContentValues cv=new ContentValues();
cv.put(Constantes.TITRE, "Gravity, Death Star I");
cv.put(Constantes.VALEUR, SensorManager.GRAVITY_DEATH_STAR_I);
db.insert("constantes", getNullColumnHack(), cv);
Livre Android.book Page 220 Dimanche, 8. novembre 2009 12:23 12
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
220 L’art du développement Android
Vous pouvez, par exemple, utiliser le code suivant :
db.execSQL("CREATE TABLE
constantes (_id INTEGER PRIMARY KEY AUTOINCREMENT,
titre TEXT, valeur REAL);");
Cet appel crée une table constantes avec une colonne de clé primaire _id qui est un
entier incrémenté automatiquement (SQLite lui affectera une valeur pour vous lorsque
vous insérerez les lignes). Cette table contient également deux colonnes de données :
titre (un texte) et valeur (un nombre réel). SQLite créera automatiquement un index sur
la colonne de clé primaire – si vous le souhaitez, vous pouvez en ajouter d’autres à l’aide
d’instructions CREATE INDEX.
Le plus souvent, vous créerez les tables et les index dès la création de la base de données
ou, éventuellement, lorsqu’elle devra être mise à jour suite à une nouvelle version de votre
application. Si les schémas des tables ne changent pas, les tables et les index n’ont pas
besoin d’être supprimés mais, si vous devez le faire, il suffit d’utiliser execSQL() afin
d’exécuter les instructions DROP INDEX et DROP TABLE.
Ajouter des données
Lorsque l’on crée une base de données et une ou plusieurs tables, c’est généralement pour
y placer des données. Pour ce faire, il existe principalement deux approches.
Vous pouvez encore utiliser execSQL(), comme vous l’avez fait pour créer les tables.
Cette méthode permet en effet d’exécuter n’importe quelle instruction SQL qui ne renvoie
pas de résultat, ce qui est le cas d’INSERT, UPDATE, DELETE, etc. Vous pourriez donc
utiliser ce code :
db.execSQL("INSERT INTO widgets (name, inventory)"+
"VALUES (’Sprocket’, 5)");
Une autre solution consiste à utiliser insert(), update() et delete() sur l’objet SQLiteDatabase. Ces méthodes utilisent des objets ContentValues qui implémentent une interface ressemblant à Map mais avec des méthodes supplémentaires pour prendre en compte
les types de SQLite : outre get(), qui permet de récupérer une valeur par sa clé, vous
disposez également de getAsInteger(), getAsString(), etc.
La méthode insert() prend en paramètre le nom de la table, celui d’une colonne pour
l’astuce de la colonne nulle et un objet ContentValues contenant les valeurs que vous
voulez placer dans cette ligne. L’astuce de la colonne nulle est utilisée dans le cas où
l’instance de ContentValues est vide – la colonne indiquée pour cette astuce recevra alors
explicitement la valeur NULL dans l’instruction INSERT produite par insert().
ContentValues cv=new ContentValues();
cv.put(Constantes.TITRE, "Gravity, Death Star I");
cv.put(Constantes.VALEUR, SensorManager.GRAVITY_DEATH_STAR_I);
db.insert("constantes", getNullColumnHack(), cv);
Livre Android.book Page 220 Dimanche, 8. novembre 2009 12:23 12
