Bonjour,
J'ai cette classe DataBaseHelper qui va me permettre de me connecter à la base donnée SQLite sous Android. J'ai une classe utilisateurDAO pour insérer et récupérer dans la table utilisateur et une autre classe utilisateur contient juste les attributs de chaque utilisateur.
J'aimerais savoir :
- A quel moment est détruite ma base données ? Dès que je ferme mon application ? C'est-à-dire la durée d’existence des données dans la base ?
- Est-ce qu'avec la base de données SQLite je peux laisser la colonne ID (identifiant de la table) sans l’insérer? C'est-à-dire est-ce que l'autoincrement fonctionne avec SQLite ?
- Où dois-je mettre le code pour créer la base données (méthode createDataBase())? Au moment de ma première activité d'authentification ?
Voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164 package com.appmobile.model.DAO; import java.io.*; import android.content.*; import android.database.SQLException; import android.database.sqlite.*; public class DataBaseHelper extends SQLiteOpenHelper { // The Android's default system path of your application database. private static String DB_PATH = "/data/data/com.greenappmobile.controller/databases/"; private static String DB_NAME = "appdatabase"; private SQLiteDatabase myDataBase; private static final String TABLE = "utilisateur"; private static final String COL_ID = "id_utilisateur"; private static final int NUM_COL_ID = 0; private static final String COL_NOM = "nom"; private static final int NUM_COL_NOM = 1; private static final String COL_PRENOM = "prenom"; private static final int NUM_COL_PRENOM = 2; private static final String COL_EMAIL = "email"; private static final int NUM_COL_EMAIL = 3; private final Context myContext; private static final String CREATE_USER = "CREATE TABLE " + TABLE + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_NOM + " TEXT NOT NULL, "+COL_PRENOM + " TEXT NOT NULL, "+ COL_EMAIL + " TEXT NOT NULL);"; /** * Constructor Takes and keeps a reference of the passed context in order to * access to the application assets and resources. * * @param context */ public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; } /** * Creates a empty database on the system and rewrites it with your own * database. * */ public void createDataBase() throws IOException { boolean dbExist = checkDataBase(); if (dbExist) { // do nothing - database already exist } else { // By calling this method and empty database will be created into // the default system path // of your application so we are gonna be able to overwrite that // database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } /** * Check if the database already exist to avoid re-copying the file each * time you open the application. * * @return true if it exists, false if it doesn't */ private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e) { // database does't exist yet. } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created * empty database in the system folder, from where it can be accessed and * handled. This is done by transfering bytestream. * */ private void copyDataBase() throws IOException { // Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; // Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); // transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } // Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException { // Open the database String myPath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if (myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_USER); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }Quelqu'un saurait-il m'indiquer s'il y a des erreurs dans mon code ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 package com.appmobile.model.DAO; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.appmobile.model.Utilisateur; public class utilisateurDAO { private static final int VERSION_BDD = 1; private static final String NOM_BDD = "DBName"; private static final String TABLE = "utilisateur"; private static final String COL_ID = "id_utilisateur"; private static final int NUM_COL_ID = 0; private static final String COL_NOM = "nom"; private static final int NUM_COL_NOM = 1; private static final String COL_PRENOM = "prenom"; private static final int NUM_COL_PRENOM = 2; private static final String COL_EMAIL = "email"; private static final int NUM_COL_EMAIL = 3; private SQLiteDatabase bdd; private static final String CREATE_BDD = "CREATE TABLE " + TABLE + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_NOM + " TEXT NOT NULL, "+COL_PRENOM + " TEXT NOT NULL, "+ COL_EMAIL + " TEXT NOT NULL);"; private DataBaseHelper maBaseSQLite; public utilisateurDAO(Context context){ //On crée la BDD et sa table maBaseSQLite = new DataBaseHelper(context); } public void onCreate(SQLiteDatabase db) { //on crée la table à partir de la requête écrite dans la variable CREATE_BDD db.execSQL(CREATE_BDD); } public void open(){ //on ouvre la BDD en écriture bdd = maBaseSQLite.getWritableDatabase(); } public void close(){ //on ferme l'accès à la BDD bdd.close(); } public SQLiteDatabase getBDD(){ return bdd; } public long insertutilisateur(Utilisateur utilisateur){ //Création d'un ContentValues (fonctionne comme une HashMap) ContentValues values = new ContentValues(); //on lui ajoute une valeur associée à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur) values.put(COL_ID, utilisateur.getId()); values.put(COL_NOM, utilisateur.getNomutil()); values.put(COL_PRENOM, utilisateur.getPrenomutil()); values.put(COL_EMAIL, utilisateur.getEmail()); //on insère l'objet dans la BDD via le ContentValues return bdd.insert(TABLE, null, values); } public int removeutilisateurWithID(int id){ //Suppression d'un utilisateur de la BDD grâce à l'ID return bdd.delete(TABLE, COL_ID + " = " +id, null); } public Utilisateur getUtilisateurWithEmail(String titre){ //Récupère dans un Cursor les valeurs correspondant à un utilisateur contenu dans la BDD (ici on sélectionne le utilisateur grâce à son titre) Cursor c = bdd.query(TABLE, new String[] {COL_ID, COL_NOM, COL_PRENOM, COL_EMAIL}, COL_EMAIL + " LIKE \"" + titre +"\"", null, null, null, null); return cursorToutilisateur(c); } //Cette méthode permet de convertir un cursor en un utilisateur private Utilisateur cursorToutilisateur(Cursor c){ //si aucun élément n'a été retourné dans la requête, on renvoie null if (c.getCount() == 0) return null; //Sinon on se place sur le premier élément c.moveToFirst(); //On créé un utilisateur Utilisateur utilisateur = new Utilisateur(); //on lui affecte toutes les infos grâce aux infos contenues dans le Cursor utilisateur.setId(c.getInt(NUM_COL_ID)); //On ferme le cursor c.close(); //On retourne le utilisateur return utilisateur; } }
Merci d'avance pour votre aide.
Partager