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.
// 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 SQLiteOpenHelper
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
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