Android SQLite Insert中的崩溃;“列不是唯一的”;

Android SQLite Insert中的崩溃;“列不是唯一的”;,android,sqlite,crash,Android,Sqlite,Crash,我试图避免数据库中的重复数据,所以我创建了唯一的列,并且通常可以插入到这些列中 问题是,当我不断插入同一内容超过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,Ay

我试图避免数据库中的重复数据,所以我创建了唯一的列,并且通常可以插入到这些列中

问题是,当我不断插入同一内容超过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都是唯一的列:

     new Thread(new Runnable() {
                    public void run() {

            /////////////// DATABASE
            File dbfile = new File(Munawwat_Database_PATH); 
            if(!dbfile.exists())
            {
                Toast.makeText(mContext, "error in db location", Toast.LENGTH_SHORT);
            }
            GetStartPageAya();
            SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
            db.execSQL("INSERT INTO Favorite_Sura (SuraNumber,AyaNumber) VALUES ("+SuraNumber+","+CurrentAya+")");
            db.close();
                    }}).start();
为什么会这样?谢谢

UPDATE1:我用来创建表的sql:

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

您故意违反了
唯一性
约束?我不确定你认为应该发生什么。如果您的应用程序可以忽略重复项,则捕获明显命名的
sqliteconstraintextException
;通常,
UNIQUE
字段之所以唯一是有原因的,为保持应用程序逻辑一致性而引发重复异常是必要的。

您是否故意违反了
UNIQUE
约束?我不确定你认为应该发生什么。如果您的应用程序可以忽略重复项,则捕获明显命名的
sqliteconstraintextException
;通常,
UNIQUE
字段是唯一的,这是有原因的,为保持应用程序逻辑一致性而引发重复异常是必要的。

您的表设计错误。您应该在表对(sura,ayah)上定义一个唯一的复合索引。

您的表设计错误。你应该在数据对(sura,ayah)上定义一个唯一的复合索引。

我想sql会检查这个表,看看它们是否存在,只是不添加而已。。我把它们放在try{..}catch(sqliteconstraintextception e){}中,尽管它仍然崩溃:(我以为sql会检查表,看看它们是否存在,只是没有被添加。)我把它们放在try{..}catch(sqliteconstraintextception e){}中,尽管它仍然崩溃:(Sheard我已经用我在(SQLite数据库浏览器应用程序)中使用的sql更新了第一篇帖子)制作表格..有什么问题吗?你能告诉我正确的方法是什么吗?Sheard我已经用我在(SQLite数据库浏览器应用程序)制作表格时使用的SQL更新了第一篇文章..有什么问题吗?你能告诉我正确的方法是什么吗?