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 :

SQLite et _id


Sujet :

Android

  1. #1
    Membre régulier Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    Par défaut SQLite et _id
    Bonjour,

    J'ai un souci au niveau de l'ID a spécifier pour une table d'une base de données SQLite.
    J'arrive à insérer mon objet en spécifiant l'ID manuellement mais je rencontre des problèmes dans les 2 cas suivants :

    -Cas N°1: Mon objet comporte un attribut ID

    Je me retrouve bloqué lorsque je crée mon objet sans l'insérer directement en base de données car je ne connais pas l'ID à spécifié dans mon constructeur?. (ex: j'ai déjà 20 entrés dans ma base de données, donc je ne sais pas que je dois spécifié 21 comme ID).
    Donc la construction de mon objet échoue ou je me retrouve avec un champ ID null.

    -Cas N°2 : Mon objet ne comporte pas de champ ID

    Je me retrouve bloqué lorsque je dois faire un traitement(ex:insert) en BDD selon un ID spécifié, car effectivement je ne connais pas le prochain ID libre.
    _______________

    Quel est la meilleure méthode pour enregistrer un objet en SQLite, définir un attribut ID à l'objet ou pas ?

    Toujours concernant cette ID si je le passe en autoincrement, quel est l'interêt d'avoir un objet qui comporte un attribut ID ?

    De plus, lorsque je fais un insert, que mon objet ne comporte pas d'attribut ID, et que l'ID de la BDD est en autoincrement. Je met donc mes valeurs dans un ContentValue, mais je n'arrive pas à saisir comment çà se passe au niveau de l'ID ?
    contentValues.put(KEY_COL_ID, ?????????);
    Je pensais ne pas avoir besoin de le spécifié mais la requête ne fonctionne pas.

    Concernant l'ID dans la class de ma Base de données (Helper), suis je obligé de renseigner un INTEGER ? lorsque j'utilise un String (TEXT) çà ne marche pas. J'ai vu certains sur le web qui disait que c'était possible d'autre qui disait non en pointant la documentation de SQLite. pourriez vous me confirmer ? car un String m'arrangerait tellement ...


    Voilà, merci pour vos réponses.


    PS: j'ai déjà lu et tester les tutoriaux developpez de Vogella et mathias-seguy

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    lol je ne comprends pas ce que tu fais mais normalement ceci fonctionne.

    insert into tbl (id, desc) values (5, 'description');

    Si tu dois mettre un id mais ne connait pas ça valeur (lol, dans ce cas tu n'insères pas le record) ton champs doit être nullable mais pas défini comme primary key, juste un index.
    Si la réponse vous a aidé, pensez à cliquer sur +1

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Le plus simple est de laisser sqlite gérer l'id avec un autoincrement.
    Tu ne le gère simplement pas à l'insertion , il s'auto incrémente tout seul.

    L'id est retourné lors de l'insertion via db.insert()
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre régulier Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    Par défaut
    lol je ne comprends pas ce que tu fais
    Qu'est ce que tu ne comprend pas ?

    insert into tbl (id, desc) values (5, 'description');
    Mais j'ai pourtant précisé: "J'arrive à insérer mon objet en spécifiant l'ID manuellement"

    @grunk
    Ok très bien, mais comment se fait t il que les ID libres de la BDD ne se remettent pas à 0 lorsque je supprime un enregistrement et que j'en insert des nouveaux ?

    useBDD_Objet = new UseBDD_Objet(this);
    useBDD_Objet.open();
    Objet Objet = new Objet();

    long id = useBDD_Objet.insertRecord(Objet); // id = 1
    useBDD_Objet.deleteRecord(id);
    long id2 = useBDD_Objet.insertRecord(Objet); // id = 2
    Log.d("query ll idll", useBDD_Objet.getDb_Objet().getTableContentAsString(useBDD_Objet.getDb()));

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    C'est le fonctionnement normal de l'autoincrément. Il s'incrémente jusqu'à arriver à sa limite (un entier 64 bit signé) et laisse donc des trous dans le cas ou il y'a des suppressions. Je connais pas de bdd qui ne fonctionne pas comme ça.
    Si il arrive à sa limite , il cherchera des "trous" pour essayer d'insérer les données avant éventuellement de planter si il ne peux plus rien insérer.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Il n'y a aucun intérêt à changer les ID après insertion ou suppression.
    L'ID ne sert qu'à avoir une contrainte d'unicité, rien d'autre. Partant de ce principe, il est inutile de modifier l'ID, du moment que la contrainte d'unicité est respecté. Ca peut déstabiliser un peu quand on débute et prend en main des BDD, mais c'est le fonctionnement normal, et les ID ne doivent pas être utilisé pour autre chose (et ne sont pas prévu pour). Le seul moyen de les utiliser que je conçois (et encore, c'est pas dit) autrement serait de fixer soi-même la règle de l'auto-incrément et jouer dessus... mais là, j'avoue que je ne vois strictement pas l'intérêt.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

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

  7. #7
    Membre régulier Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    Par défaut
    @grunk, @Hizin

    merci pour ces précisions, je n'avais jamais vraiment réalisé cet effet sur les ID lors de suppressions d'enregistrement. Maintenant je le sais

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

Discussions similaires

  1. Obtenir le _id "max" d'une table SQLite vide
    Par kegilko dans le forum Android
    Réponses: 9
    Dernier message: 31/03/2013, 12h18
  2. qui connait sqlite ?
    Par Emmanuel Lecoester dans le forum SQLite
    Réponses: 23
    Dernier message: 19/02/2010, 13h44
  3. [SQLite]éliminer un motif dans des champ TEXT
    Par Invité(e) dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2005, 17h44
  4. base de données en sqlite
    Par Cyrillou dans le forum SQLite
    Réponses: 1
    Dernier message: 12/05/2005, 15h37
  5. debuter en SQLite
    Par venomelektro dans le forum SQLite
    Réponses: 4
    Dernier message: 08/12/2004, 19h17

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