Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在SQLite中插入,错误代码:19_Android_Sqlite_Insert - Fatal编程技术网

Android 无法在SQLite中插入,错误代码:19

Android 无法在SQLite中插入,错误代码:19,android,sqlite,insert,Android,Sqlite,Insert,当我尝试运行以下操作时: ContentValues cv=new ContentValues(); cv.put(表\本地设置\单位,输入); mDb.insert(表_LocalSettings,“,cv); 我得到了以下错误: 插入单位时出错=0 SqliteConstraintException:错误代码19约束失败。 有什么问题吗? 表sql代码为: “创建不存在的表”+表\u LocalSettings+”(“+表\u LocalSettings\u ID +“整型主键不为空,”+

当我尝试运行以下操作时:

ContentValues cv=new ContentValues();
cv.put(表\本地设置\单位,输入);
mDb.insert(表_LocalSettings,“,cv);
我得到了以下错误:

插入单位时出错=0
SqliteConstraintException:错误代码19约束失败。

有什么问题吗? 表sql代码为:

“创建不存在的表”+表\u LocalSettings+”(“+表\u LocalSettings\u ID
+“整型主键不为空,”+表\u本地设置\u映射类型
+整数不为空,“+table\u LocalSettings\u Visib+”位不为空,”
+表\u LocalSettings\u Unit+“整数默认值0不为空,”
+表\u LocalSettings\u SpeedUnit+“整数不为空,”
+table\u LocalSettings\u Alert+“位不为空,”+table\u LocalSettings\u UserID
+整数默认值-1,“+table\u LocalSettings\u Username+”VARCHAR,”
+表\u LocalSettings\u PowerSave+“VARCHAR”+表\u LocalSettings\u PremiumUser
+“整数不为空默认值为0);”;
约束失败


听起来您的主键已经存在于表中了

我也遇到了同样的问题,奔腾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检查代码的错误和拼写,如果使用emulator,则清除数据

您可以在此处看到所有SQLite错误代码的列表。错误代码19表示在操作(插入等)期间违反了表约束(非空、唯一等)。从表创建逻辑来看,许多字段都设置为NOTNULL,但您只尝试插入一列。如果创建的表的值不能为null,则必须在插入过程中包含非null值,否则将看到错误代码19。如果不需要约束,还可以从数据库表中删除该约束

作为补充说明,还有其他允许处理约束冲突的插入方法,例如

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

其中INTEGER是SQLiteDatabase类中的静态冲突解决变量之一(但我认为它们中的任何一个都不允许NOTNULL冲突)。您还可以在此处阅读有关SQLite冲突解决选项的更多信息:

您可以从表中删除
NOTNULL
,它将正常工作。像这样:
对:

错:

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

我最近遇到了同样的问题,但我确信插入了正确的数据。结果是,我定义了一些触发器,在更改表时忘记更改它们。在我的例子中,字段的类型是错误的,不是“唯一”或“非空”约束


因此,如果您有这个问题,并且没有看到任何违反约束的情况,请检查您的触发器(如果有)。

我已经更新了第一个问题。你看到我的sql有什么问题吗?我不能!听起来您没有附加到主键的contentvalues值。这是失败的,因为表创建缺少autoincrement指令,它类似于:
“\u id”integer主键autoincrement NOT NULL
,但这适用于另一列,即table\u LocalSettings\u Unit。我看不到您为列table\u LocalSettings\u ID插入值。将该autoincrement指令添加到表创建中,可能会开始工作。麦格特霍吉·米尔特·托特尼克·伊吉?不幸的是,这不起作用。sqlite的官方文档说:“整型主键”还包括AUTOINCREMENT关键字。因此,我不需要添加它:(将表从设备上取下,在SQLite引擎中测试是否有效。我仍然相信您的自动增量功能已损坏。使用
NOT NULL
时没有任何
错误。它声明值不允许为NULL。
String callTable = "CREATE TABLE IF NOT EXISTS '%s'" + "(userid VARCHAR not Null , callwith VARCHAR not null, calltype VARCHAR, callstart time, callend time, callmedia VARCHAR" + ");"