主键唯一时,Android SQLite PRIMARY KEY必须是唯一的异常

时间:2014-07-01 15:30:52

标签: android sqlite primary-key

我正在尝试创建一个表并在Android应用程序中使用SQLite插入行。我需要对主键进行硬编码,因为它们将用于对数据库的查询。主键必须与其他数据库匹配。

我用这个创建表:

CREATE TABLE Properties(ID INTEGER PRIMARY KEY, Name TEXT)

然后我有一个基于来自数据库的查询插入行的方法。这类似于查询的外观:

INSERT INTO Properties (ID, Names) VALUES
(5001, "A Property"),
(4001, "B Property"),
(3001, "C Property")

我收到一条带有“PRIMARY KEY必须唯一(代码19)”消息的SQLLiteConstraintException。我的主键都是独一无二的。我怀疑这种情况正在发生,因为主键不按顺序排列。我在数据库中进行的查询是按名称排序,而不是主键。

有趣的是,当我从我的设备中提取SQLite数据库时,它似乎拥有所有数据。

1 个答案:

答案 0 :(得分:3)

  

有趣的是,当我从我的设备中提取SQLite数据库时,它似乎拥有所有数据。

我的猜测是发生了什么:

  • 您开始卸载应用
  • 您安装了自己的应用
  • 你运行了你的app,调用了这个在新创建的数据库中插入三行的方法,该方法成功了
  • 您可能对该应用进行了一些更改
  • 您再次运行了应用程序,调用此方法尝试将三行插入到已存在的数据库中,而前一次运行中的行已经存在,并且您无法使用唯一性约束

您的工作是确保您尝试插入的数据不存在,或者您没有违反任何唯一性限制。由于不清楚“基于数据库中的查询插入行的方法”的用途是什么目的,因此很难为您提供更具体的建议。