Не удалось вставить в SQLite, код ошибки: 19

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

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

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

ошибка вставки unit = 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 ответов


ограничение не

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


У меня была та же проблема, и ответ 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);";

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

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


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

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

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

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


вы можете удалить 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" + ");"