如果不存在则插入?

时间:2011-04-12 15:49:55

标签: java android sqlite

我提示用户将项目添加到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。

4 个答案:

答案 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命令无效的原因