Bonjour,
j'ai une listview et un bouton. Chaque fois que je clique sur le bouton ça créé un enregistrement qui est ajouté dans la listview et dans une base sqlite. Tout se passe bien tant que j'ajoute.
Avec un click long sur un item de la listview un menu avec l'option effacer s'affiche. Pour effacer je retire l'enregistrement de la listview et de la base sqlite en me basant sur l'index de la listview. Le fait d'effacer dans la base fonctionne. Par contre je me suis aperçu que l'id dans la base sqlite des enregistrements restants n'est pas mis à jour. Si j'efface le troisième enregistrement de la listview et donc de la base, puis je fais un getAll sur ma base je m'aperçois que ma base contient 3 enregistrements avec les id 1, 2, et 4. Donc ma fonction basée sur l'index de la listview ne fonctionne plus...
Est ce normal que les id de la base ne soient pas mis à jour après en avoir effacer un ou est ce que j'ai oublié quelque chose ?
Voici mon open helper :
MA fonction pour effacer dans la base :
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 public class MaBaseOpenHelper extends SQLiteOpenHelper { private static final int VERSION_BDD = 1; private static final String NOM_BDD = "BDDtask.db"; public static final String TABLE_TACHES = "table_taches"; public static final String COL_ID = "_id"; public static final int NUM_COL_ID = 0; public static final String COL_TITRE = "Titre"; public static final int NUM_COL_TITRE = 1; public static final String COL_DESCRIPTION = "Description"; public static final int NUM_COL_DESCRIPTION = 2; public static final String COL_DATEECHEANCE = "Date"; public static final int NUM_COL_DATEECHEANCE = 3; private static final String CREATE_BDD = "CREATE TABLE " + TABLE_TACHES + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_TITRE + " TEXT NOT NULL, " + COL_DESCRIPTION + " TEXT NOT NULL, " + COL_DATEECHEANCE + " TEXT NOT NULL);"; public MaBaseOpenHelper(Context context, CursorFactory factory) { super(context, NOM_BDD, factory, VERSION_BDD); } @Override public void onCreate(SQLiteDatabase db) { //on créé la table à partir de la requête écrite dans la variable CREATE_BDD db.execSQL(CREATE_BDD); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //On peut fait ce qu'on veut ici moi j'ai décidé de supprimer la table et de la recréer //comme ça lorsque je change la version les id repartent de 0 db.execSQL("DROP TABLE " + TABLE_TACHES + ";"); onCreate(db); } }
Ma fonction pour insérer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void removeByID(int id) { bdd.delete(maBaseOpenHelper.TABLE_TACHES,maBaseOpenHelper.COL_ID + "=?",new String[] { String.valueOf(id) }); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public void insert(TaskDetails entite) { //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(maBaseOpenHelper.COL_TITRE, entite.getTitre()); values.put(maBaseOpenHelper.COL_DESCRIPTION, entite.getDescription()); values.put(maBaseOpenHelper.COL_DATEECHEANCE, entite.getDateEcheance()); //on insère l'objet dans la BDD via le ContentValues bdd.insert(maBaseOpenHelper.TABLE_TACHES, null, values); }
Partager