我有一个共同的问题,并且已经看过几个解决方案,但没有看到适合这种情况的解决方案。
我有一个临时表,定义如下:
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 :(得分:0)
您是否故意使用临时表?一旦关闭数据库连接,临时表就会死掉。如果是这种情况,将创建表,并且插入将不对应于任何表。因此约束19可以对应于“未找到表”
答案 1 :(得分:0)
如果“约束失败”比表格方案中的内容应该告诉我们什么是错的。 我看到它显示数据要插入什么,这意味着 NOT NULL 约束是可以的。 在这种情况下,我只假设您已插入一些值为 2 的GROUP_GROUP_ID_COLUMN_NAME,并且 UNIQUE 约束因此而失败。
答案 2 :(得分:0)
您不应在insert方法中传递空值。传递空字符串。