我有一个SQLite数据库,我正在使用此查询插入新记录:
INSERT OR REPLACE INTO tags (id, name, color, type, deleted, dirty) VALUES (?, ?, ?, ?, ?, 0)
Id
是PRIMARY KEY
如果我要插入新记录(表中不存在id
)INSERT
执行完毕,一切都很好。如果id
已经存在,那么REPLACE
就会启动,并且记录会被替换。我应该为REPLACE
查询添加一个条件:当且仅当在表中已存在的记录中将dirty设置为1时,才应替换该记录。如何在查询中添加此类条件?
答案 0 :(得分:2)
这就是我使用的。
首先根据您的情况尝试更新 然后,如果没有更新,执行插入...
检查下面的一个例子。调用 upsertCategory
/*
* Update a category
*/
public long updateCategory(Category category) {
ContentValues values = new ContentValues();
values.put(COL_CATEGORYDESCRIPTION, category.getDescription());
values.put(COL_CATEGORYSTATUS, category.getStatus());
values.put(COL_CATEGORYCREATEDAT, category.getCreatedAt().getDate());
values.put(COL_CATEGORYUPDATEDAT, category.getUpdatedAt().getDate());
long id = db.update(TABLE_CATEGORIES, values, KEY_ID + "=" + category.getId(), null);
return id;
}
/*
* Update or Insert a category
*/
public long upsertCategory(Category category) {
// update row
long id = updateCategory(category);
// 0 rows affected
if (id == 0) {
// insert row
id = insertCategory(category);
}
return id;
}