Android SQLite Insert中的崩溃;“列不是唯一的”;
我试图避免数据库中的重复数据,所以我创建了唯一的列,并且通常可以插入到这些列中 问题是,当我不断插入同一内容超过1次时,应用程序就会崩溃。。这里是logcat: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
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更新了第一篇文章..有什么问题吗?你能告诉我正确的方法是什么吗?