我有以下方法在我的sqlite数据库中插入值。我试图更新代码以处理" carid"和" sellerno"已存在于表中,如果它们替换为要插入的新值。任何帮助表示赞赏。
public void addListItem(String carid,String sellerno,String condition,String dat) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(carid, carid);
values.put(sellerno, sellerno);
values.put(cond, condition);
values.put(updatetime, dat);
db.insert(TABLE_CARS, null, values);
db.close();
}
答案 0 :(得分:1)
有两个要求:
carid
和sellerno
的组合对于表格中的所有行必须是唯一的。您可以通过修改CREATE TABLE
命令来同时执行这两项操作:
CREATE TABLE tableName (
column1 ...,
column2 ...,
...,
UNIQUE(column1, column2) ON CONFLICT REPLACE)
现在,当插入/更新产生冲突时,任何插入/更新都将自动替换现有行中的值。
但是,在发生冲突时,您可能不希望替换行中的值。在这些情况下,您应该在插入/更新本身中指定冲突算法(使用this或this),这将覆盖上面指定的替换算法。或者,您可以不使用上面的ON CONFLICT REPLACE
,只使用常规插入/更新,但是当您要替换时必须插入/更新冲突。
您可以阅读有关冲突算法here的更多信息。
答案 1 :(得分:0)
更新代码与您现在的非常相似。
您必须添加新值但需要相同的ID,然后使用insert(...)
或replace(...)
而不是方法update(...)
。
db.update(TABLE_CARS, values, "_id "+"="+1, null);
// The third argument above is the where clause.
另一种方式是:
db.replace(TABLE_CARS, null, values);
您的其余代码是相同的。只需更改insert
行。