2011-07-03 4 views
0

J'essaie d'éviter les données en double sur ma base de données, j'ai donc fait des colonnes UNIQUE, et je peux normalement les insérer.Crash dans SQLite Insert "Les colonnes ne sont pas uniques"

Le problème est quand je garde l'insertion de la même chose plus de 1 fois, puis les accidents app .. Voici 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) 

Le code que j'utiliser pour insérer, à la fois SuraNumber et CurrentAya sont des colonnes UNIQUE :

Pourquoi cela se produit-il? Merci.

Update1: Le sql j'ai utilisé pour créer la table:

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

Répondre

3

Vous violez délibérément la contrainte UNIQUE? Je ne suis pas sûr de ce que vous pensez qu'il devrait se passer. Attrapez évidemment le SQLiteConstraintException si votre application peut se permettre d'ignorer les doublons; Généralement, un champ UNIQUE est unique pour une raison, et lever une exception pour un doublon est nécessaire pour maintenir la cohérence logique de l'application.

+0

Je pensais que sql vérifiait la table et voyait si elles existaient elles ne sont simplement pas ajoutées .. Je les ai mises dans {..} catch (SQLiteConstraintException e) {} bien qu'il se bloque toujours :( – Omar

0

Vous avez la mauvaise conception pour votre tableau. Vous devez définir un indice composé composé sur la paire (sourate, ayah).

+2

Sheard j'ai mis à jour le premier message avec le SQL que j'ai utilisé dans (application SQLite Database Browser) pour faire la table .. Y at-il quelque chose de mal à cela? Pouvez-vous me dire quelle est la bonne façon de le faire? – Omar

Questions connexes