2011-07-03 5 views
0

데이터베이스에 중복 데이터가 발생하지 않도록하기 위해 UNIQUE 열을 만들었으므로 일반적으로 삽입 할 수 있습니다.SQLite에 크래시 삽입 "열이 고유하지 않습니다"

문제는 내가 같은 일을 1 개 이상 시간을 삽입 한 후 응용 프로그램 충돌을 지킬 때 .. 여기입니다 로그 캣입니다 :

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 모두 UNIQUE 열은 :

왜 이런 일이 발생합니까? 감사.

갱신 1 :

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

답변

3

당신은 의도적으로 UNIQUE 제약 조건을 위반하고 : 나는 테이블을 만드는 데 사용되는 SQL? 무슨 일이 일어나야한다고 생각하는지 모르겠습니다. 응용 프로그램에서 중복을 무시할 수 있다면 분명히 SQLiteConstraintException이라는 이름을 잡으십시오. 일반적으로 UNIQUE 필드는 이유 때문에 고유하며 응용 프로그램의 논리적 일관성을 유지하려면 복제본에 대한 예외를 발생시키는 것이 필요합니다.

+0

나는 SQL이 테이블을 검사하여 추가되었는지 알지 못한다고 생각했다. 나는 그것들을 {..} catch (SQLiteConstraintException e) {}에 넣었지만 여전히 충돌한다. ( – Omar

0

테이블 디자인이 잘못되었습니다. 쌍 (sura, ayah)에 화합물 색인을 고유하게 정의해야합니다.

+2

Sheard I 've (SQLite 데이터베이스 브라우저 애플 리케이션)에서 테이블을 만들기 위해 사용되는 SQL로 첫 번째 게시물을 업데이 트했습니다. 거기에 뭔가 문제가 있습니까? 내가 옳은 방법으로 그것을 할 수 말해 줄 수 있습니까? – Omar

관련 문제