Android SQLite автоинкремент - PullRequest
       1

Android SQLite автоинкремент

45 голосов
/ 08 декабря 2011

У меня в настоящее время есть таблица с именем User, в которой есть столбец id, который создается как

'INTEGER PRIMARY KEY'

Допустим, я создал двух пользователей, поэтому таблица имеет идентификаторы 1 и 2

Если я удаляю второго пользователя и создаю третьего, идентификатор равен 2, мне нужно, чтобы это было 3

Так что, похоже, Android выбирает следующий доступный идентификатор, как я могу изменить его на более похожий на порядковый номер?

Привет

Ответы [ 3 ]

93 голосов
/ 08 декабря 2011

Сделай это INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL. Вот что документы говорят:

Если столбец имеет тип INTEGER PRIMARY KEY AUTOINCREMENT, тогда ... выбран ROWID для новой строки, по крайней мере, на один больше, чем самый большой ROWID, который имеет когда-либо существовал в той же таблице.

Поведение, реализованное ключевым словом AUTOINCREMENT, неуловимо отличается от поведения по умолчанию. С AUTOINCREMENT, строки с автоматически выбранные ROWID гарантированно будут иметь ROWID, которые имеют никогда ранее не использовался одной и той же таблицей в той же базе данных. И автоматически генерируемые ROWID гарантированно будут монотонными растет.

12 голосов
/ 12 июня 2015

SQLite AUTOINCREMENT - это ключевое слово, используемое для автоматического увеличения значения поля в таблице. Мы можем автоматически увеличивать значение поля с помощью ключевого слова AUTOINCREMENT при создании таблицы с определенным именем столбца для ее автоматического увеличения.

Ключевое слово AUTOINCREMENT может использоваться только с полем INTEGER. Синтаксис:

Основное использование ключевого слова AUTOINCREMENT выглядит следующим образом:

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

Например, см. Ниже: Рассмотрим таблицу COMPANY, которая будет создана следующим образом:

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

Теперь вставьте следующие записи в таблицу TB_COMPANY_INFO:

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

Теперь выберите запись

SELECT *FROM TB_COMPANY_INFO
    ID      NAME            AGE     ADDRESS             SALARY
    1       Manoj Kumar     40      Meerut,UP,INDIA     200000.00
0 голосов
/ 29 мая 2019

Если говорить за ANDROID , да, приведенные выше ответы верны, за исключением именования столбца id.

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

Похоже, в Android его следует назвать 'rowid',И с курсором вам нужно создать его экземпляр как:

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

В противном случае это не сработало бы для меня.Я не знаю, почему это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...