为什么IGNORE语句不起作用?每次运行时都会在数据库中插入相同的值,我不知道为什么?
myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
myDB.execSQL("INSERT OR IGNORE INTO " + MY_DB_TABLE + "(db_datum, db_zahlen, db_scheine)"
+"VALUES ('"+datum+"',"+
"'"+zahlen+"',"+
"'"+9+"');");
db schema是:
db_datum(varchar(100))
db_zahlen(varchar(100))
db_scheine(整数)
我有2个字符串“datum”和“zahlen”,并希望将它们插入数据库中。现在问题是,如果db中已经存在相同的字符串并且代码再次运行,则它们将被忽略并且永远不会再次插入。
答案 0 :(得分:14)
您可以使用insertWithOnConflict。 例如:
mDb.insertWithOnConflict(DATABASE_TABLE, null, initialValues, SQLiteDatabase.CONFLICT_IGNORE);
答案 1 :(得分:2)
您不应该使用execSQL
来执行INSERT命令(请查看文档)。
改为使用myDB.insertOrThrow(...)
:
ContentValues cv = new ContentValues();
cv.put("db_datum", datum);
cv.put("db_zahlen", zahlen);
cv.put("db_scheine", 9);
myDB.insertOrThrow(MY_DB_TABLE, null, cv);