我正在尝试避免在我的数据库上重复数据,所以我创建了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)
)
答案 0 :(得分:3)
您故意违反UNIQUE
约束?我不确定你认为应该发生什么。如果您的应用程序可以忽略重复项,请抓住明显命名的SQLiteConstraintException
;通常,UNIQUE
字段由于某种原因是唯一的,并且为了保持应用程序的逻辑一致性,必须引发重复的异常。
答案 1 :(得分:0)
您的桌面设计错误。您应该在货币对上定义一个唯一的复合索引(sura,ayah)。