SQLite中的崩溃插入“列不是唯一的”

时间:2011-07-03 07:44:17

标签: android sqlite crash

我正在尝试避免在我的数据库上重复数据,所以我创建了UNIQUE列,我通常可以插入它们。

问题是当我继续插入相同的东西超过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都是UNIQUE列:

     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)
)

2 个答案:

答案 0 :(得分:3)

您故意违反UNIQUE约束?我不确定你认为应该发生什么。如果您的应用程序可以忽略重复项,请抓住明显命名的SQLiteConstraintException;通常,UNIQUE字段由于某种原因是唯一的,并且为了保持应用程序的逻辑一致性,必须引发重复的异常。

答案 1 :(得分:0)

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