2010-08-05 52 views
9

当我试图运行以下命令:无法在SQLite的插入,错误代码:19

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

我得到了以下错误:

Error inserting unit = 0;
SqliteConstraintException: error code 19 constraint failed.

应该是什么问题呢? 表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);"; 

回答

11

constraint failed

听起来像是你的主键的表

+0

我已经更新了第一个问题。你看到我的SQL有什么问题吗?我不能! – Karoly 2010-08-05 16:56:56

+0

您的声音没有附加到主键的contentvalues值。这是失败的,因为表创建缺少autoincrement指令,它会是这样的:''_id'整数主键KEY AUTOINCREMENT NOT NULL' – Pentium10 2010-08-05 16:59:06

+0

输入变量是一个整数 – Karoly 2010-08-05 16:59:33

4

已经存在,我有同样的问题和奔腾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);"; 

我觉得我的问题之一是我有一个额外的列。我之前删除了一列,并没有从上面的行中删除它。

最主要的是tripple检查错误和拼写的代码,如果使用模拟器清除数据。

2

您可以在这里看到所有SQLite错误代码列表http://www.sqlite.org/c3ref/c_abort.html。错误代码19意味着在操作(插入等)期间违反了表约束(NOT NULL,UNIQUE等)。从查看您的表创建逻辑,您的许多字段设置为NOT NULL,但您只是试图插入一个列。如果您创建的表的值不能为空,则必须在INSERT过程中包含非空值,否则您将看到错误代码19.如果不需要,您也可以从数据库表中删除约束。

作为一个侧面说明,还有其他的插入方法,允许处理违反约束如

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

其中integer是在SQLiteDatabase类中的静态解决冲突的变量之一(但我不认为他们中的任何一个都允许NOT NULL违规)。你也可以在这里阅读更多关于SQLite冲突解决方案的选项:http://www.sqlite.org/conflict.html

2

你可以从表中删除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" + ");" 
+0

没有什么'错误'与'NOT NULL“,它声明一个值不允许为空。 – Hobbyist 2015-10-09 09:47:22

相关问题