插入空表时SQLite错误'column _id不唯一'

时间:2013-03-31 16:47:11

标签: android sql sqlite

我有一个包含4个字段的表格:_idtofromhidden

尝试插入以下值时:

_id=167 from=1311005879000 to=1311005879000 hidden=0

进入我的表格,我得到一个 SQLiteConstraintException ,说明

'column _id is not unique (code 19)'

为了找到导致此问题的原因,我尝试查询表的大小并发现它为0,所以我不知道它来自何处。

也许我没有正确理解错误?

编辑:一些代码!

try {
    mDatabase.insertOrThrow("groups", null,
            mContentValues);
} catch (SQLException e) {
    e.printStackTrace();
}

创建SQL:

CREATE TABLE IF NOT EXISTS groups(_id LONG PRIMARY KEY,hidden INTEGER,from LONG,to LONG

1 个答案:

答案 0 :(得分:6)

  

'column _id不是唯一的(代码19)'

所以你违反了UNIQUE约束。这是 SQLiteConstraintException 的原因。您的_id列很可能是主键,主键已隐式分配UNIQUE约束,表示没有两行可以拥有相同的主键。

您正在尝试插入已在db中的_id已被分配给PK的{​​{1}}。

  

我尝试查询表的大小,发现它是0,所以我没有   想法来自何处。

我认为您的查询被破坏了,因为您的NULL说明了所有内容,如果某个地方不是问题则无法抛出。

更新

如果您未被Exception分配给NULL,并且您的表中有0条记录,则可能存在问题:

PK

您被分配{Column}的mDatabase.insertOrThrow("groups", null, mContentValues); 作为NULL方法的第二个参数,您不应该这样做。在SQLite中,每行必须至少指定一列。它需要一个可安全分配给insert()的列。