Невозможно вставить в SQLite, код ошибки: 19 - PullRequest
9 голосов
/ 05 августа 2010

Когда я пытаюсь запустить следующее:

  ContentValues cv = new ContentValues();
  cv.put(table_LocalSettings_Unit, input);
  mDb.insert(table_LocalSettings, "", cv);

Я получил следующую ошибку:

Ошибка при вставке блока = 0;
SqliteConstraintException: ограничение кода ошибки 19 не удалось.

В чем должна быть проблема? Таблица sql Код:

 "create table if not exists " + table_LocalSettings + "( " + table_LocalSettings_ID
     + " INTEGER PRIMARY KEY NOT NULL , " + table_LocalSettings_MapType
     + " INTEGER NOT NULL , " + table_LocalSettings_Visib + " BIT NOT NULL , "
     + table_LocalSettings_Unit + " INTEGER DEFAULT 0 NOT NULL , "
     + table_LocalSettings_SpeedUnit + " INTEGER NOT NULL , "
     + table_LocalSettings_Alert + " BIT NOT NULL ," + table_LocalSettings_UserID
     + " INTEGER DEFAULT -1 , " + table_LocalSettings_Username + " VARCHAR , "
     + table_LocalSettings_PowerSave + " VARCHAR , " + table_LocalSettings_PremiumUser
     + " INTEGER NOT NULL DEFAULT 0);";

Ответы [ 4 ]

11 голосов
/ 05 августа 2010

ограничение не выполнено

Похоже, ваш первичный ключ уже существует в таблице

4 голосов
/ 07 октября 2010

У меня была та же проблема, и ответ Pentium 10 привел меня в правильном направлении. После проверки того, что нижний код был неправильным, затем исправив его, я удалил данные из этого приложения в эмуляторе, и он воссоздал БД, и теперь он работает нормально.

     "create table if not exists " + DATABASE_TABLE + " (" + _ID + " integer primary key autoincrement," +
     " ItemName text not null, ItemID text not null, Image text not null, ImageDate text not null);";

Я думаю, что одной из моих проблем была дополнительная колонка. Ранее я удалил один из столбцов и не удалил его из приведенных выше строк.

Главное - тройная проверка кода на наличие ошибок и орфографических ошибок и при использовании эмулятора очистить данные.

2 голосов
/ 07 июня 2011

Вы можете удалить not null из таблицы, и он будет работать нормально. как это:
право:

String callTable = "CREATE TABLE IF NOT EXISTS '%s'" + "(userid VARCHAR, callwith VARCHAR, calltype VARCHAR, callstart time, callend time, callmedia VARCHAR" + ");"

неправильно:

String callTable = "CREATE TABLE IF NOT EXISTS '%s'" + "(userid VARCHAR not Null , callwith VARCHAR not null, calltype VARCHAR, callstart time, callend time, callmedia VARCHAR" + ");"
2 голосов
/ 02 мая 2011

Здесь вы можете увидеть список всех кодов ошибок SQLite http://www.sqlite.org/c3ref/c_abort.html. Код ошибки 19 означает, что ограничение таблицы (NOT NULL, UNIQUE и т. Д.) Было нарушено во время операции (INSERT и т. Д.). Судя по логике создания таблицы, для многих из ваших полей установлено значение NOT NULL, но вы пытаетесь вставить только один столбец. Если вы создаете свою таблицу так, чтобы значения не могли быть нулевыми, вы должны включить ненулевое значение во время INSERT, в противном случае вы увидите код ошибки 19. Вы также можете удалить ограничение из таблицы базы данных, если оно не нужно. ,

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

db.insertWithOnConflict(..., ..., ..., INTEGER);

где INTEGER - одна из статических переменных разрешения конфликтов в классе SQLiteDatabase (но я не думаю, что какая-либо из них допускает нарушение NOT NULL). Вы также можете узнать больше о вариантах разрешения конфликтов SQLite здесь: http://www.sqlite.org/conflict.html

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