2014-07-01 90 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

看來我試圖插入方法兩次,而沒有意識到應用程序第一次安裝時。 –

相關問題