2011-07-03 59 views
0

我試圖避免在我的數據庫上的重複數據,所以我做了UNIQUE列,我通常可以插入到他們。在SQLite中崩潰插入「列是不唯一的」

問題是,當我將保持同樣的事情不止1次,然後應用程序崩潰。這裏是logcat的:

07-03 10:33:53.577: ERROR/Database(19974): Failure 19 (columns SuraNumber, AyaNumber are not unique) on 0x2dc560 when executing 'INSERT INTO Favorite_Sura (SuraNumber,AyaNumber) VALUES (17,1)' 
07-03 10:33:54.440: ERROR/AndroidRuntime(19974): FATAL EXCEPTION: Thread-11 
07-03 10:33:54.440: ERROR/AndroidRuntime(19974): android.database.sqlite.SQLiteConstraintException: columns SuraNumber, AyaNumber are not unique: INSERT INTO Favorite_Sura (SuraNumber,AyaNumber) VALUES (17,1) 
07-03 10:33:54.440: ERROR/AndroidRuntime(19974):  at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 
07-03 10:33:54.440: ERROR/AndroidRuntime(19974):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763) 
07-03 10:33:54.440: ERROR/AndroidRuntime(19974):  at omar.quran1.Quran$16.run(Quran.java:910) 
07-03 10:33:54.440: ERROR/AndroidRuntime(19974):  at java.lang.Thread.run(Thread.java:1019) 

我使用插入代碼,既SuraNumber和CurrentAya是唯一列:

這是爲什麼發生?謝謝。

UPDATE1:

CREATE TABLE Favorite_Sura 
(
_Id INTEGER PRIMARY KEY, 
SuraNumber int, 
AyaNumber int, 
UNIQUE (SuraNumber, AyaNumber) 
) 

回答

3

你是故意違反UNIQUE約束:我用來創建該表的SQL?我不確定你認爲應該發生什麼。如果您的應用程序可以承受忽略重複項,則抓住顯式名稱SQLiteConstraintException;通常,UNIQUE字段由於某個原因而是唯一的,並且爲維護應用程序邏輯一致性而引發重複異常是必需的。

+0

我以爲SQL會檢查表,看看他們是否存在,他們只是不添加..我把它們放入try {..} catch(SQLiteConstraintException e){}雖然它仍然崩潰:( – Omar

0

您的表格設計錯誤。您應該定義一對獨特的化合物索引(sura,ayah)。

+2

Sheard I've用SQLite中使用的SQL更新了第一篇文章(SQLite數據庫瀏覽器應用程序)來製作表格。它有什麼問題嗎?你能告訴我什麼是正確的方法嗎? – Omar