Comment utiliser SQLite sous Android
Date de publication : 10 février 2011.
Par
Axon de Tuto Mobile (Tuto Mobile)
Après une grosse période de coupure, me revoilà avec de nouveaux tutoriels. Celui d'aujourd'hui concerne SQLite sous Android. C'est toujours utile de pouvoir stocker quelques données dans une application. Les tables que l'on créé avec SQLite doivent bien entendu être simples, tout comme les requêtes que vous ferez dessus. Rappelez-vous que l'on n'est pas sur des méga serveurs ultra puissants, mais simplement sur un mobile.
I. Introduction
Pour notre exemple, nous allons créer une mini base de données pour enregistrer des livres. Durant ce tutoriel, nous utiliserons les classes suivantes :
- SQLiteOpenHelper qui est une classe d'assistance pour gérer la création de bases de données et la gestion des versions.
- ContentValue, cette classe est utilisée pour stocker un ensemble de valeurs que le ContentResolver peut traiter.
- Cursor est une interface qui donne accès en lecture-écriture à l'ensemble des résultats retournés par une requête de base de données.
On va donc commencer doucement avec la création de la classe Livre (très simple pour notre exemple). D'ailleurs, dernière petite précision, dans ce tutoriel on ne va pas faire d'interface graphique, on va juste afficher les résultats de nos requêtes dans des Toast.
II. Code Java
Après avoir créé un nouveau projet (perso moi je suis toujours avec Android 1.6), on va tout de suite concevoir une nouvelle classe que l'on va appeler Livre. Cette classe est très simple puisque dans notre cas, un livre est défini par un ID, un numéro ISBN et un titre. On crée le constructeur ainsi que les getter et les setter et le tour est joué. Voici le code :
package com.tutomobile.android.sqlite;
@author
public class Livre {
private int id;
private String isbn;
private String titre;
public Livre (){ }
public Livre (String isbn, String titre){
this .isbn = isbn;
this .titre = titre;
}
public int getId () {
return id;
}
public void setId (int id) {
this .id = id;
}
public String getIsbn () {
return isbn;
}
public void setIsbn (String isbn) {
this .isbn = isbn;
}
public String getTitre () {
return titre;
}
public void setTitre (String titre) {
this .titre = titre;
}
public String toString (){
return " ID : " + id+ " \nISBN : " + isbn+ " \nTitre : " + titre;
}
}
|
Maintenant nous allons faire une nouvelle classe que j'ai appelée MaBaseSQLite et qui hérite de SQLiteOpenHelper. Cette classe va nous permettre de définir la table qui sera produite lors de l'instanciation de celle-ci. Le code est très simple vous allez voir, et je l'ai commenté :
package com.tutomobile.android.sqlite;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
public class MaBaseSQLite extends SQLiteOpenHelper {
private static final String TABLE_LIVRES = " table_livres " ;
private static final String COL_ID = " ID " ;
private static final String COL_ISBN = " ISBN " ;
private static final String COL_TITRE = " Titre " ;
private static final String CREATE_BDD = " CREATE TABLE " + TABLE_LIVRES + " ( "
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_ISBN + " TEXT NOT NULL, "
+ COL_TITRE + " TEXT NOT NULL); " ;
public MaBaseSQLite (Context context, String name, CursorFactory factory, int version) {
super (context, name, factory, version);
}
@ Override
public void onCreate (SQLiteDatabase db) {
db.execSQL (CREATE_BDD);
}
@ Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL (" DROP TABLE " + TABLE_LIVRES + " ; " );
onCreate (db);
}
}
|
Ensuite nous allons créer une nouvelle classe (rassurez-vous, c'est la dernière) que j'ai appelée LivresBDD. Elle va nous permettre de gérer l'insertion, la suppression, la modification de livres dans la BDD (Base De Données) ainsi que de faire des requêtes pour récupérer un livre contenu dans la base de données. Comme d'habitude je vous donne le code commenté, j'espère que cela suffira pour comprendre :
package com.tutomobile.android.sqlite;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class LivresBDD {
private static final int VERSION_BDD = 1 ;
private static final String NOM_BDD = " eleves.db " ;
private static final String TABLE_LIVRES = " table_livres " ;
private static final String COL_ID = " ID " ;
private static final int NUM_COL_ID = 0 ;
private static final String COL_ISBN = " ISBN " ;
private static final int NUM_COL_ISBN = 1 ;
private static final String COL_TITRE = " Titre " ;
private static final int NUM_COL_TITRE = 2 ;
private SQLiteDatabase bdd;
private MaBaseSQLite maBaseSQLite;
public LivresBDD (Context context){
maBaseSQLite = new MaBaseSQLite (context, NOM_BDD, null , VERSION_BDD);
}
public void open (){
bdd = maBaseSQLite.getWritableDatabase ();
}
public void close (){
bdd.close ();
}
public SQLiteDatabase getBDD (){
return bdd;
}
public long insertLivre (Livre livre){
ContentValues values = new ContentValues ();
values.put (COL_ISBN, livre.getIsbn ());
values.put (COL_TITRE, livre.getTitre ());
return bdd.insert (TABLE_LIVRES, null , values);
}
public int updateLivre (int id, Livre livre){
ContentValues values = new ContentValues ();
values.put (COL_ISBN, livre.getIsbn ());
values.put (COL_TITRE, livre.getTitre ());
return bdd.update (TABLE_LIVRES, values, COL_ID + " = " + id, null );
}
public int removeLivreWithID (int id){
return bdd.delete (TABLE_LIVRES, COL_ID + " = " + id, null );
}
public Livre getLivreWithTitre (String titre){
Cursor c = bdd.query (TABLE_LIVRES, new String[] { COL_ID, COL_ISBN, COL_TITRE} , COL_TITRE + " LIKE \" " + titre + " \" " , null , null , null , null );
return cursorToLivre (c);
}
private Livre cursorToLivre (Cursor c){
if (c.getCount () = = 0 )
return null ;
c.moveToFirst ();
Livre livre = new Livre ();
livre.setId (c.getInt (NUM_COL_ID));
livre.setIsbn (c.getString (NUM_COL_ISBN));
livre.setTitre (c.getString (NUM_COL_TITRE));
c.close ();
return livre;
}
}
|
Bon allez encore un petit d'effort, on tient le bon bout, il ne reste plus qu'à faire le petit bout de code de test. Je ne suis même pas obligé de vous le donner, car si vous avez bien compris ce qu'on a fait avant vous pourrez le faire les doigts dans le nez. Mais bon si vous n'avez pas compris ce qu'on a fait avant, c'est peut-être que j'ai mal expliqué donc je vais vous donner le code pour tester notre programme. Celui-ci est à mettre dans l'Activity qui se créer par défaut lorsque vous faites votre nouveau projet Android :
package com.tutomobile.android.sqlite;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class Tutorial16_Android extends Activity {
@ Override
public void onCreate (Bundle savedInstanceState) {
super .onCreate (savedInstanceState);
setContentView (R.layout.main);
LivresBDD livreBdd = new LivresBDD (this );
Livre livre = new Livre (" 123456789 " , " Programmez pour Android " );
livreBdd.open ();
livreBdd.insertLivre (livre);
Livre livreFromBdd = livreBdd.getLivreWithTitre (livre.getTitre ());
if (livreFromBdd ! = null ){
Toast.makeText (this , livreFromBdd.toString (), Toast.LENGTH_LONG).show ();
livreFromBdd.setTitre (" J'ai modifié le titre du livre " );
livreBdd.updateLivre (livreFromBdd.getId (), livreFromBdd);
}
livreFromBdd = livreBdd.getLivreWithTitre (" J'ai modifié le titre du livre " );
if (livreFromBdd ! = null ){
Toast.makeText (this , livreFromBdd.toString (), Toast.LENGTH_LONG).show ();
livreBdd.removeLivreWithID (livreFromBdd.getId ());
}
livreFromBdd = livreBdd.getLivreWithTitre (" J'ai modifié le titre du livre " );
if (livreFromBdd = = null ){
Toast.makeText (this , " Ce livre n'existe pas dans la BDD " , Toast.LENGTH_LONG).show ();
}
else {
Toast.makeText (this , " Ce livre existe dans la BDD " , Toast.LENGTH_LONG).show ();
}
livreBdd.close ();
}
}
|
Si vous lancez votre application, vous devriez voir apparaître successivement les écrans suivants :
Android SQLite
Android SQLite
Android SQLite
Voilà ! On en a enfin fini avec ce tutoriel sur SQLite ! Alors c'est si terrible que ça? Si vous n'avez pas compris quelques choses, n'hésitez pas à poser vos questions dans un commentaire (enfin regardez bien d'abord si vous avez tout fait ;) ). Pour nous aider et nous remercier, se serait gentil de partager ce tutoriel sur
Twitter et
FaceBook.
III. Remerciements
Je tiens à remercier tout particulièrement
MrDuchnok qui a mis ce tutoriel au format Developpez.com.
Merci également à
Mahefasoa d'avoir pris le temps de le relire et de le corriger.
IV. Lien
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2010 RENOUARD. Aucune reproduction, même partielle, ne peut être
faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à
trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.