【问题标题】:SQLite error 'column _id is not unique' on when inserting into an empty table插入空表时出现 SQLite 错误“列 _id 不是唯一的”
【发布时间】:2013-03-31 16:47:10
【问题描述】:

我有一个包含 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

【问题讨论】:

  • 代码,代码,代码,代码,代码,代码。给我们一些!
  • 建表的sql是什么?

标签: android sql sqlite


【解决方案1】:

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

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

您正在尝试插入重复的 _id 已在 db 中或 PK 已分配给 NULL

我尝试查询表的大小,发现它是0,所以我没有 知道这是从哪里来的。

我认为您的查询已损坏,因为您的 Exception 说明了一切,如果某处没有问题,则无法抛出。

更新:

如果您没有将 NULL 分配给 PK 并且您的表有 0 条记录,则问题可能就在这里:

mDatabase.insertOrThrow("groups", null, mContentValues);

您被分配给 ColumnHack NULL 作为 insert() 方法的第二个参数,您不应该这样做。在 SQLite 中,每一行必须至少指定一列。它需要一列可以安全地分配给NULL

【讨论】:

  • 我的查询:SELECT COUNT(*) FROM groups
  • 那么我应该指定哪一列?
  • @saarraz1 如果您的列没有空约束。在你的情况下:隐藏,去往或来自。我可以问个问题吗?为什么你接受了 Hoan 的回答?只从某处复制文本?
  • 我居然误接受了。我还没有机会检查您的任何一个解决方案,尽管 Hoan 的解决方案(如果可行的话)在我的情况下会更容易实现,因为我将对多个表使用相同的代码。
  • @saarraz1 好吧,你吓到我了 :- 你的错误很清楚我在 asnwer 中提到的方式,所以检查一下并告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
相关资源
最近更新 更多