我提示用户将项目添加到SQLiteDb。当他们点击添加时,我想检查该项是否已经存在...如果没有,那么我想插入它。
我打电话
mDbHelper.createNote(inputLine.getText().toString().trim(), mTable[i]);
哪个电话......
public long createNote(String value, String table) {
ContentValues initialValues = new ContentValues();
initialValues.put(table, value);
return mDb.insert(table, null, initialValues);
}
这是可行的,但它不会检查项目是否已存在,因此它仍会插入重复项。所以我试过
return mDb.insertWithOnConflict(table, null, initialValues, SQLiteDatabase.CONFLICT_FAIL);
但是,它似乎无法识别insertWIthOnConflict或SQLiteDatabase.CONFLICT_FAIL ...
我怎样才能让它发挥作用?
编辑:它是1个表,2行。 table name = note,rows = _id,note。
答案 0 :(得分:2)
使用REPLACE命令
答案 1 :(得分:1)
在这种情况下,我会进行这样的检查:
if (!checkRecordExist(DATABASE_TABLE, new String[] {KEY_1, KEY_2}, new String[] {value_1, value_2}))
database.insert(DATABASE_TABLE, null, updateValues);
,其中
private boolean checkRecordExist(String tableName, String[] keys, String [] values) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < keys.length; i++) {
sb.append(keys[i])
.append("=\"")
.append(values[i])
.append("\" ");
if (i<keys.length-1) sb.append("AND ");
}
Cursor cursor = database.query(tableName, null, sb.toString(), null, null, null, null);
boolean exists = (cursor.getCount() > 0);
cursor.close();
return exists;
}
答案 2 :(得分:0)
添加主键。如果您尝试使用相同的键插入另一行,则插入将失败。
答案 3 :(得分:0)
您是否尝试过使用未设置为自动增量的主键?这可能是REPLACE命令无效的原因