2014-07-01 48 views
2

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

我创建表与此:

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

然后我有一个插入基于从数据库中查询行的方法。这是类似于查询的样子:

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

我得到消息“主键必须是唯一的(代码19)”的SQLLiteConstraintException。我的主键都是独一无二的。我怀疑这是因为主键不正确而发生的。我从数据库中进行的查询按名称排序,而不是主键。

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

+0

通常建议在android中使用_id作为列名。 –

回答

3

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

我的猜测是,发生了什么事是:

  • 你开始了与你的应用程序卸载
  • 您安装应用程式
  • 你跑你的应用程序,调用此方法插三行在新创建的数据库中,成功
  • 您可能对应用程序做了一些更改
  • 您再次运行您的应用程序,调用thi该方法尝试将三行插入到已存在的数据库中,该数据库与先前运行的行已存在,并且您失败了唯一性约束

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

+0

看来我试图插入方法两次,而没有意识到应用程序第一次安装时。 –

相关问题