SQLite INSERT OR REPLACE条件

时间:2017-09-17 16:40:08

标签: sqlite

我有一个SQLite数据库,我正在使用此查询插入新记录:

INSERT OR REPLACE INTO tags (id, name, color, type, deleted, dirty) VALUES (?, ?, ?, ?, ?, 0)

IdPRIMARY KEY

如果我要插入新记录(表中不存在idINSERT执行完毕,一切都很好。如果id已经存在,那么REPLACE就会启动,并且记录会被替换。我应该为REPLACE查询添加一个条件:当且仅当在表中已存在的记录中将dirty设置为1时,才应替换该记录。如何在查询中添加此类条件?

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;
}