SQLite错误:约束失败
我有一个共同的问题,并已看过几种解决方案,但没有看到适合这种情况的解决方案。SQLite错误:约束失败
我有如下定义的临时表:
public static final String GROUP_TABLE_CREATE =
"CREATE TEMP TABLE "+GROUP_TABLE_NAME+" ("
+GROUP_ID_COLUMN_NAME+" INTEGER PRIMARY KEY AUTOINCREMENT, "
+GROUP_GROUP_ID_COLUMN_NAME+" INTEGER NOT NULL UNIQUE, "
+GROUP_COLUMN_NAME+" VARCHAR(64) NOT NULL)";
该表没有任何问题产生。然后我下载一些数据插入到它并使用下面的查询,将其插入:
ContentValues contentValues = new ContentValues();
contentValues.put(WhereWolfOpenHelper.GROUP_GROUP_ID_COLUMN_NAME, groupID);
contentValues.put(WhereWolfOpenHelper.GROUP_COLUMN_NAME, groupName);
db.insert(WhereWolfOpenHelper.GROUP_TABLE_NAME, null, contentValues);
然后我得到以下错误:
08-05 08:52:37.791: ERROR/Database(847): Error inserting group_name=Friends group_id=2
08-05 08:52:37.791: ERROR/Database(847): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
错误出现两次,唯一的数据库中的数据是名为Friends的组(应该有两个以上的条目)。
我有另一张非常相似的代码,没有任何问题,所以我猜这只是一个愚蠢的错误,我没有发现任何问题。任何人有任何想法?
如果“约束失败”比表格方案中的某些内容应该告诉我们什么是错误的。 我看到它显示的数据是什么它要插入,这意味着什么NOT NULL约束是好的。 在这种情况下,我只有一个假设,你已经插入了一些GROUP_GROUP_ID_COLUMN_NAME,值为和UNIQUE约束因此失败。
我拿出了独特的约束,它揭示了我的问题的根源 - 我忘了增加一个迭代器,并试图将同一行放入三次!谢谢你的帮助 – Pikaling
你故意使用临时表吗?一旦DB连接关闭,临时表就会死亡。如果是这种情况,表格将被创建并且插入不会对应任何表格。因此,约束条件19可以对应于'未找到表'
是的我故意创建一个临时表,它是在数据放入之前立即创建的。 – Pikaling
您不应该在insert方法中传递null值。传递空字符串。
那该怎么办? – Pikaling
嗨vicki尝试删除GROUP_GROUP_ID_COLUMN_NAME的UNIQUE属性 –