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

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

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);"; 

Solutions Collecting From Web of "Не удалось включить INSERT в SQLite, код ошибки: 19"

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

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

У меня была та же проблема, и ответ 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 означает, что во время операции было нарушено ограничение таблицы (NOT NULL, UNIQUE и т. Д.) (INSERT и т. Д.). От взгляда на логику создания таблицы многие из ваших полей имеют значение NOT NULL, но вы только пытаетесь вставить один столбец. Если вы создаете таблицу таким образом, чтобы значения не могли быть нулевыми, вы должны включить непустое значение во время INSERT, иначе вы увидите код ошибки 19. Вы также можете удалить ограничение из своей таблицы базы данных, если оно не требуется ,

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

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

Где INTEGER является одной из статических переменных разрешения конфликтов в классе SQLiteDatabase (но я не думаю, что любой из них допускает нарушение NOT NULL). Вы также можете узнать больше о вариантах разрешения конфликтов 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" + ");"