SQLite错误:约束失败

时间:2011-08-05 08:56:13

标签: android 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的组(应该还有两个条目)。

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

3 个答案:

答案 0 :(得分:0)

您是否故意使用临时表?一旦关闭数据库连接,临时表就会死掉。如果是这种情况,将创建表,并且插入将不对应于任何表。因此约束19可以对应于“未找到表”

答案 1 :(得分:0)

如果“约束失败”比表格方案中的内容应该告诉我们什么是错的。 我看到它显示数据要插入什么,这意味着 NOT NULL 约束是可以的。 在这种情况下,我只假设您已插入一些值为 2 的GROUP_GROUP_ID_COLUMN_NAME,并且 UNIQUE 约束因此而失败。

答案 2 :(得分:0)

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