-
02avr
Développez une application pour android etape 5 (Connexion à la base de données sqlite)
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
Apprenez à développer en vidéo
20 commentaires
Laissez un commentaire
Vous devez être identifié pour publier un commentaire.
Connexion - Inscription
S'inscrire










test
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?
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?
@Alatar : mbbuilder= problème de copier coller, j’ai corrigé mon script merci encore de ta remarque.
@Alatar : Comment as tu fait pour résoudre l’erreur générer à cause de “mCtycx”.
@Guy : J’ai cette erreur :“the field mCtx may not have been initialized”, lorsque je compile le programme. Peux-tu m’aider à résoudre?
@Coupobol : rajoute
le constructeur
public BDAcces(Context ctx) {
this.mCtx = ctx;
}
@Guy : Merci Guy
Merci pour cet exemple simple et précis.
je pense qu’il manque les // de commentaire au debut de la ligne 55
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!
@Vendetta : tu peux télécharger le code entier a l’étape 7 Développez une application pour android etape 7
Merci je viens de voir ca. Tes explications marchent parfaitement pour l’instant
Merci pour ta réponse rapide.
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
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
@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 =
}
bjr a tous je suis un debutant android je veut faire une application elle consiste a crée 3 bouton qui affiche 3 liste differente chaque ellement de ces liste affiche une image reference dans une base de donnée prés etablit avec sqlite je suis bloque au niveau de comment relier le bouton a la liste et relier les element de la liste a la base de donnée
((((((((((
slv aider moi c pour mon memoire (license)
merci d’avance