web-dev-qa-db-fra.com

Android Incrémentation automatique SQLite

J'ai actuellement une table appelée User qui a une colonne id qui est créée en tant que

"CLÉ PRIMAIRE ENTIÈRE"

Disons que j'ai créé deux utilisateurs pour que la table ait les identifiants 1 et 2

Si je supprime le deuxième utilisateur et en crée un troisième, l'ID est 2, j'ai besoin que ce soit 3

Il semble donc Android sélectionne le prochain identifiant disponible, comment puis-je le changer en un numéro de séquence?

Cordialement

45
user964283

Fais-le INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL. Voici ce que les docs disent:

Si une colonne a le type INTEGER PRIMARY KEY AUTOINCREMENT alors ... le ROWID choisi pour la nouvelle ligne est au moins un plus grand que le plus grand ROWID qui ait jamais existé auparavant dans cette même table.

Le comportement implémenté par le mot clé AUTOINCREMENT est subtilement différent du comportement par défaut. Avec AUTOINCREMENT, les lignes avec des ROWID sélectionnés automatiquement sont garanties d'avoir des ROWID qui n'ont jamais été utilisés auparavant par la même table dans la même base de données. Et les ROWID générés automatiquement sont garantis en augmentation monotone.

93
Graham Borland

SQLite AUTOINCREMENT est un mot-clé utilisé pour incrémenter automatiquement une valeur d'un champ dans la table. Nous pouvons incrémenter automatiquement une valeur de champ en utilisant le mot clé AUTOINCREMENT lors de la création d'une table avec un nom de colonne spécifique pour l'incrémenter automatiquement.

Le mot clé AUTOINCREMENT ne peut être utilisé qu'avec le champ INTEGER. Syntaxe:

L'utilisation de base du mot clé AUTOINCREMENT est la suivante:

CREATE TABLE table_name(
   column1 INTEGER AUTOINCREMENT,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
);

Par exemple, voir ci-dessous: Considérez la table COMPANY à créer comme suit:

sqlite> CREATE TABLE TB_COMPANY_INFO(
   ID INTEGER PRIMARY KEY   AUTOINCREMENT,
   NAME           TEXT      NOT NULL,
   AGE            INT       NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Maintenant, insérez les enregistrements suivants dans la table TB_COMPANY_INFO:

INSERT INTO TB_COMPANY_INFO (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'MANOJ KUMAR', 40, 'Meerut,UP,INDIA', 200000.00 );

Sélectionnez maintenant l'enregistrement

SELECT *FROM TB_COMPANY_INFO
    ID      NAME            AGE     ADDRESS             SALARY
    1       Manoj Kumar     40      Meerut,UP,INDIA     200000.00
12
mkumar0304

Si vous parlez pour Android, oui, les réponses ci-dessus sont correctes, sauf le nom de la colonne id.

   database.execSQL("CREATE TABLE IF NOT EXISTS "
                + TableName
                + " ( rowid INTEGER PRIMARY KEY AUTOINCREMENT,  Raqam VARCHAR, ChandBor INT(3));");

Il ressemble à Android il doit être nommé 'rowid'. Et avec Cursor vous devez l'instancier comme:

Cursor cursorLcl = database.rawQuery("SELECT *," + TableName + ".rowid AS rowid" + " FROM " +
                TableName, null);

Sinon, cela n'a pas fonctionné pour moi. Je ne sais pas pourquoi.

0
CodeToLife