Dans mes posts précédent j’ai mis en place un formulaire d’enregistrement d’une recette
Maintenant que j’ai mon formulaire je dois sauvegarde les informations saisies, android embarque une base de données sqlite trés proche de mysql je vais donc utiliser cette base.
je vais avant de commence parler (vite fait) de la structure de ma base de données. J’ai une table recette_larecette, une table recette_condiment et une table recette_contenu,chaque ingrédient est indexé dans la table recette_condiment et la table recette_contenu permet de lier les ingrédients à la recette.

Je vais développer une classe qui vas être dédié uniquement à gérer mes actions sur ma bdd. Pour créer ma nouvelle classe, dans eclipse il faut ouvrir l’aborescence src et sur le package bouton droit->new->class. Pour mon exemple j’appelle ma classe BDAcces

j’obtiens donc ce code
package com.example.testrecette;
public class BdAcessV1 {
}
Je rajoute des attributs static dans lesquelles je mets le nom de ma base, le nom de mes tables ainsi que mes différentes requêtes de création.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | // variable bdd
private static final String RECETTE_TABLE = "recette_larecette";
private static final String INGREDIENT_RECETTE_TABLE = "recette_contenu";
private static final String INGREDIENT_TABLE = "recette_condiment";
private static final String DATABASE_NAME = "recette_android";
private static final int DATABASE_VERSION = 1;
//requete creation bdd
private static final String CREATE_RECETTE_TABLE ="CREATE TABLE recette_larecette ("
+"id_larecette BIGINT PRIMARY KEY AUTOINCREMENT,"
+"id_user INTEGER(11) NOT NULL,"
+"id_pays INTEGER UNSIGNED NOT NULL,"
+"id_typerepas INTEGER UNSIGNED NOT NULL,"
+"nom_larecette VARCHAR(250) NOT NULL,"
+"supplogique_larecette VARCHAR(10) NOT NULL,"
+"recette_larecette LONGTEXT NOT NULL,"
+"nbrpers_larecette INTEGER UNSIGNED NOT NULL,"
+"dateenreg_larecette DATETIME NOT NULL,"
+"nbrcalories_larecette INTEGER UNSIGNED NOT NULL,"
+"liensite_enreg LONGTEXT NOT NULL"
+")";
private static final String CREATE_RECETTE_CONTENU ="CREATE TABLE recette_contenu ("
+"id_contenu BIGINT PRIMARY KEY AUTOINCREMENT,"
+"id_unitemesure INT NOT NULL,"
+"id_larecette BIGINT NOT NULL,"
+"id_condiment BIGINT NOT NULL,"
+"nombre_contenu DECIMAL NOT NULL,"
+"unitemesure_contenu VARCHAR(20) NULL"
+")";
private static final String CREATE_RECETTE_CONDIMENT ="CREATE TABLE recette_condiment ("
+"id_condiment BIGINT PRIMARY KEY AUTOINCREMENT,"
+"id_typealiment INTEGER UNSIGNED NOT NULL,"
+"nom_condiment VARCHAR(250) NOT NULL,"
+"mesure_condiment VARCHAR(100) NOT NULL,"
+"supplogique_condiment VARCHAR(10) NOT NULL '"
+")";
//Faire attention à la création d'une tables sous sqlite la formulation des requetes est un peu différente de celle en mysql
//je rajoute également trois attributs
private final Context mCtx;
//contient les information sur l'environnement de mon application
//class permettant de manager la creation,et la mise à jur de notre base
public BDAcces(Context ctx) {
this.mCtx = ctx;
}
private DatabaseHelper mDbHelper;
//class d'action sur notre base
private SQLiteDatabase mDb;
private static final String TAG = "BDAcces";
J'ai vais maintenant créer ma classe DatabaseHelper qui est une extension de <a href="http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html">SQLiteOpenHelper</a>
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);//ouverture ou creation de la base si elle n'existe pas
}
@Override
// methode qui est appelé quand on ouvre la bas pour la première fois
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_RECETTE_TABLE);
db.execSQL(CREATE_RECETTE_CONTENU);
db.execSQL(CREATE_RECETTE_CONDIMENT);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//methode permettant une lis aà jour de notre pas de donné
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS "+INGREDIENT_TABLE);
db.execSQL("DROP TABLE IF EXISTS "+RECETTE_TABLE);
db.execSQL("DROP TABLE IF EXISTS "+INGREDIENT_RECETTE_TABLE);
onCreate(db);
}
} |
je vais donc créer pour ma class trois méthodes (pour le moment)
- open() qui ouvre l’acces a ma base
- close() qui ferme l’acces a ma base
- insertRecette() qui enregistre notre recette
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public void open() throws SQLException
{
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
}
public void close()
{
mDbHelper.close();
}
public long insertRecette(String sNomRecette, String sContenuRecette)
{
ContentValues initialValues = new ContentValues();
initialValues.put("nom_larecette", sNomRecette);
initialValues.put("recette_larecette", sContenuRecette);
return mDb.insert(RECETTE_TABLE, null, initialValues);
} |
A suivre comment lier tous ça dans mon application android
Ne pas oublier d’importer les packages suivant:
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.util.Log;
Il est temps de mettre à profit les tutoriels d’Android France:
Passez à la vitesse supérieure et investissez quelques dizaines d’euros pour acquérir les connaissances qui vous feront gagner de l’argent avec vos applications, rendez-vous sur notre boutique Android-france pour ces formations en vidéo


















02 avril 2009 à 17 h 36 min
test
30 mai 2009 à 19 h 30 min
Quelques corrections apportées, merci.
Mais la classe BDAccess ne fonctione toujours pas : Eclipse me met une erreur (pas un warning) “the field mCtx may not have been initialized”. L’initialiser à NULL pose t’il problème pour la suite de l’appli?
30 mai 2009 à 19 h 47 min
Autres problèmes : sauter une ligne avant ton “private static final String CREATE_RECETTE_TABLE”
Autre chose : une initialisation qui traine : dans ta fonction open(), une ligne ne contenant que :
“mbbuilder =”
Pas de valeur d’initialisation ni rien, pas de point virgule, le caractère suivant est l’accolade fermante de fin de fonction. En pus, la variable n’a été créée nulle part. Vraie variable utile ou vestige d’une ancienne version?
01 juin 2009 à 10 h 32 min
@Alatar : mbbuilder= problème de copier coller, j’ai corrigé mon script merci encore de ta remarque.
07 juin 2009 à 10 h 08 min
@Alatar : Comment as tu fait pour résoudre l’erreur générer à cause de “mCtycx”.
08 juin 2009 à 22 h 21 min
@Guy : J’ai cette erreur :“the field mCtx may not have been initialized”, lorsque je compile le programme. Peux-tu m’aider à résoudre?
09 juin 2009 à 7 h 48 min
@Coupobol : rajoute
le constructeur
public BDAcces(Context ctx) {
this.mCtx = ctx;
}
09 juin 2009 à 18 h 39 min
@Guy : Merci Guy
23 juin 2009 à 19 h 20 min
Merci pour cet exemple simple et précis.
11 août 2009 à 7 h 39 min
je pense qu’il manque les // de commentaire au debut de la ligne 55
01 septembre 2009 à 16 h 25 min
Les explications sont un peu rapide surtout sans le code au complet sous les yeux (on ne sait jamais si on l’a bien inséré le code au bon endroit sauf quand ça marche bien sur …). Y aurait-t-il quelqu’un d’assez sympa pour mettre le code en entier?
Pas mal le site sinon!
01 septembre 2009 à 17 h 04 min
@Vendetta : tu peux télécharger le code entier a l’étape 7 Développez une application pour android etape 7
02 septembre 2009 à 8 h 27 min
Merci je viens de voir ca. Tes explications marchent parfaitement pour l’instant
Merci pour ta réponse rapide.
29 décembre 2009 à 21 h 28 min
salut
le lien pour télécharger le code entier a l’étape 7 Développez une application pour android etape 7 est mort
merci
23 mars 2010 à 14 h 54 min
Développez une application pour android etape 5 (Connexion à la base de données sqlite)
je veut savoir comment vous avez effectué la connexion à la base de données c’est à dire l’étape précédente
24 mars 2010 à 14 h 08 min
@chouk slt
c’est cette méthode qui cree une instance de la base de donnée
public void open() throws SQLException
{
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
//mbbuilder =
}