Créer une base sqlite dans android
Alors bon, j’en vois qui trépignent au fond du blog, sur l’article précédent qui utilise un ContentProvider.
Voici donc une petite procédure simple pour créer une base de données dans votre application google android et ce de façon, disons … propre.
L’intérêt de stocker des machins dans une base de données android, c’est en général de partager les données avec d’autres éventuelles applications, sinon, autant utiliser des objets non persistants … enfin on voit l’idée.
Pour créer ma base, je n’ai besoin que d’une classe en plus de mon Activity, un ContentProvider.
Voilà ma classe (ho pas de mérite, avec Eclipse, ça se monte tout seul !) :
public class MyProvider2 extends ContentProvider { @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // TODO Auto-generated method stub return 0; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub return null; } @Override public Uri insert(Uri uri, ContentValues values) { // TODO Auto-generated method stub return null; } @Override public boolean onCreate() { // TODO Auto-generated method stub return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // TODO Auto-generated method stub return null; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO Auto-generated method stub return 0; } }
Pour charger notre ContentProvider au démarrage de l’application, il faut le déclarer dans le fichier manifest AndroidManifest.xml :
Attention au nommage, comme ce fichier est lu par le plugin qui génère automatiquement une partie du code Java, il ne validera pas le document si par exemple la classe Java MyProvider n’existe pas dans le projet. Dans notre cas, on ne recopie pas bêtement puisque la classe ci dessus s’appelait MyProvider2 …
Juste pour voir, on peut lancer l’activité principale (oui oui vous avez été malins, vous n’avez pas créé une classe comme ça dans le vent, mais vous avez créé un projet Android et donc vous avez une activité par défaut, le monde est bien fait).
Je vais jeter un oeil dans Eclipse au contenu de mon application, il faut pour ça ouvrir la Vue File Explorer :
Quand on explore cette vue, on déplie notre package dans /data/data :
Rien de nouveau à priori, on continue.
Dans notre classe ContentProvider, nous allons ajouter cette classe interne :
private SQLiteDatabase formationDB; private static final String DATABASE_NAME = "Formation"; private static final String DATABASE_TABLE = "filieres"; private static final int DATABASE_VERSION = 1; private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE + " (_id integer primary key autoincrement, " + "title text not null, description text not null);"; private static class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w("Content provider database", "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS titles"); onCreate(db); } }
On enregistre et on re-lance l’application.
On peut rester de nouveau notre File Explorer android, rien de nouveau …
Et c’est normal.
Pour charger le ContentProvider et créer la base de données sqlite associée, il faut implémenter la méthode onCreate() de notre classe :
@Override public boolean onCreate() { Context context = getContext(); DatabaseHelper dbHelper = new DatabaseHelper(context); formationDB = dbHelper.getWritableDatabase(); return (formationDB == null) ? false : true; }
C’est l’appel à la méthode getWritableDatabase() qui lance la création de la base si elle n’existe pas.
En effet, nous pouvons lancer de nouveau notre application et constater dans le file explorer que notre base sqlite a été créée dans le répertoire databases de notre projet :
Notre base de données sqlite android est créée et nous pouvons l’interroger, par exemple avec le shell adb de l’émulateur (une fois l’émulateur lancé bien entendu) :
>adb shell cd data/data cd com.oxiane.content.providernew.android # ls ls databases lib # cd databases cd databases # ls ls Formation # sqlite3 Formation sqlite3 Formation SQLite version 3.5.9 Enter ".help" for instructions sqlite> .tables .tables android_metadata filieres sqlite> select * from filieres; select * from filieres; sqlite> insert into filieres values (null, "filière JAVA", "Le développement objet avec Java et JavaEE"); insert into filieres values (null, "filière JAVA", "Le développement objet avec Java et JavaEE"); sqlite> select * from filieres; select * from filieres; 1|filière JAVA|Le développement objet avec Java et JavaEE sqlite>
Voilà, la base est prête. Il ne reste plus qu’à renseigner correctement les URI pour y accéder, pour ça il faudra passer par les UriMatcher.
Les éléments importants qu’il faut ensuite traiter sont par exemple les différentes tables (ici nous n’en avons créé qu’une seule) et la construction des requêtes qui renvoient des objets de type Cursor.
La formation Android chez OXiane
Alain
-
antroïd
-
aboudard
-
Oussema_naifer
-
Alain Boudard
-
Oussema_naifer
-
Alain Boudard
-
samar
-
alain
-
tak
-
Alain Boudard
-
tak
-
Alain Boudard
-
tak