IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Principe des ID dans base SQLite


Sujet :

Android

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Principe des ID dans base SQLite
    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 :
    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 effacer dans la base :

    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) });
     
    	}
    Ma fonction pour insérer :
    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);	
     
    	}

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Citation Envoyé par pierreduguet Voir le message
    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 ?
    Si j'ai bien compris, tu penses qu'en effaçant un élément d'une table les index vont se réorganiser pour toujours des index consécutif ?

    Et bien non, il ne faut pas y compter et en tenir compte pour développer ton interface et autres. Il ne faut pas tenir compte de l'index de l'élément dans la listview, mais l'index de l'élément dans la database. C'est a ta liste ou son model d'en tenir compte.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Ok merci la réponse est claire.
    Par contre comment faire en sorte que ma listview s'adapte à l'id de la base ?

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    J ai trouvé. J'ai fait le lien à ma façon, ce n 'est peut être pas parfait mais ça marche. Merci pour ton aide

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Figure toi que je me rends compte que je suis sur le forum android ^^ et ListView je ne connais absolument pas (ni android d'ailleurs) donc je ne saurai pas t'aider la dessus avec certitude ne connaissant pas le fonctionnement.

    Mais sinon, comment remplis tu ta liste en fait, tu as un code ou quoi ? (peut etre que ca me parlera, en attendant qu'un pro d'android passe par la avant).

    Edit : Ha ben voila impeccable tu as trouvé
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Stockage des fichier Dans base de donnée sql
    Par Meryjean dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/08/2010, 12h23
  2. Réponses: 7
    Dernier message: 11/05/2010, 13h28
  3. [Lazarus] Recherche dans base Sqlite
    Par ovni76 dans le forum Lazarus
    Réponses: 3
    Dernier message: 05/11/2009, 13h43
  4. Gestion des Temps dans Base Sql Server par Delphi
    Par BYALI dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/03/2008, 14h09
  5. INserer des enregistrement dans base oracle
    Par battit64000 dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/09/2007, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo