Android: вставка sqlite-записи с колонкой AUTOINCREMENT - PullRequest
13 голосов
/ 09 ноября 2011

У меня есть база данных sqlite на Android, созданная следующим образом:

sqlite> .schema
CREATE TABLE criterion ('_id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, active text, important text, sort int, summary text, user text, category_id int, entrytype int);

Единственный способ вставить запись в эту таблицу - указать для _id значение, которое я хочу автоматически увеличить. Это единственный способ заставить вставку работать:

recid = totalrecs + 1;
String q = "insert into criterion (_id, active, important, sort, summary, user, category_id, entrytype) values (" + recid + ", \"1\", \"0\", 99, \"foobar\", \"1\", 99, 0)";
Log.d (TAG, "query:" + q);
mDb.execSQL (q);

Если я опускаю столбец _id и не указываю значение для _id, я получаю сообщение об ошибке:

android.database.sqlite.SQLiteConstraintException: criterion._id may not be NULL: insert into criterion(active, important, sort, summary, user, category_id, entrytype) values ("1", "0", 99, "foobar", "1", 99, 0)

Как мне организовать запрос (или схему), чтобы Android позаботился об увеличении столбца _id ?

Обновление / исправление 2 строки выше (удалено NOT NULL, удалено _id из запроса):

CREATE TABLE criterion ('_id' INTEGER PRIMARY KEY AUTOINCREMENT, active text, important text, sort int, summary text, user text, category_id int, entrytype int);

String q = "insert into criterion (active, important, sort, summary, user, category_id, entrytype) values (\"1\", \"0\", 99, \"foobar\", \"1\", 99, 0)";

1 Ответ

30 голосов
/ 09 ноября 2011

Удалите NOT NULL из схемы, и вы получите золотистый цвет.

Пояснение: если в столбце с автоинкрементом указано NOT NULL, то автоинкремент не будет работать.NOT NULL - это то, что делает его, поэтому вы должны указать _id.

Как только вы удалите его и не включите _id в оператор вставки, SQL получит _id как NULL и автоматически обработает настройку_id для вас.

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