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的组(应该有两个以上的条目)。

我有另一张非常相似的代码,没有任何问题,所以我猜这只是一个愚蠢的错误,我没有发现任何问题。任何人有任何想法?

+0

那该怎么办? – Pikaling

+0

嗨vicki尝试删除GROUP_GROUP_ID_COLUMN_NAME的UNIQUE属性 –

如果“约束失败”比表格方案中的某些内容应该告诉我们什么是错误的。 我看到它显示的数据是什么它要插入,这意味着什么NOT NULL约束是好的。 在这种情况下,我只有一个假设,你已经插入了一些GROUP_GROUP_ID_COLUMN_NAME,值为和UNIQUE约束因此失败。

+0

我拿出了独特的约束,它揭示了我的问题的根源 - 我忘了增加一个迭代器,并试图将同一行放入三次!谢谢你的帮助 – Pikaling

你故意使用临时表吗?一旦DB连接关闭,临时表就会死亡。如果是这种情况,表格将被创建并且插入不会对应任何表格。因此,约束条件19可以对应于'未找到表'

+0

是的我故意创建一个临时表,它是在数据放入之前立即创建的。 – Pikaling

您不应该在insert方法中传递null值。传递空字符串。