我想更新多行。 就像make status = false where status = true,make status = true,其中id = x
try {
String where = "id=?";
String[] whereArgs = new String[] { Id };
SQLiteDatabase db = this.getWritableDatabase();
ContentValues initialValues = new ContentValues();
initialValues.put("status", "true");
db.update(TABLE_PROJECT, initialValues, where, whereArgs);
db.close();
} catch (Exception e) {
Log.e("Exception in update query", e.toString());
}
目前发生了什么我能够第一次更新状态,但是下次我需要将之前的状态更改为false然后使用true更新新状态。我搜索并发现它可以用switch case完成,但是在这里我们如何应用它呢?
答案 0 :(得分:0)
为了能够读取旧的status
值,您必须在单个查询中执行这两个更新。
你是对的,这需要CASE expression;像这样的东西:
UPDATE Project
SET status = CASE
WHEN status = 'true' THEN 'false'
WHEN id = 'x' THEN 'true'
END
WHERE status = 'true' OR id = 'x' -- don't change other records
ContentValues
类仅支持文字值,而不支持表达式,因此您必须使用rawQuery
代替:
db.rawQuery("UPDATE "+TABLE_PROJECT+" "+
"SET status = CASE "+
"WHEN status = 'true' THEN 'false' "+
"WHEN id = ?1 THEN 'true' "+
"END "+
"WHERE status = 'true' OR id = ?1",
new String[] { Id });
(这假定id
是一个字符串;如果不是,则不需要使用参数。
?1
是第一个参数。)
答案 1 :(得分:-3)
try {
String where = "id=? or status=?";
String[] whereArgs = new String[] { Id,"false" };
SQLiteDatabase db = this.getWritableDatabase();
ContentValues initialValues = new ContentValues();
initialValues.put("status", "true");
db.update(TABLE_PROJECT, initialValues, where, whereArgs);
db.close();
} catch (Exception e) {
Log.e("Exception in update query", e.toString());
}