2013-05-20 68 views
0

我想更新多行。 就像讓狀態=假,其中狀態= TRUE,使狀態= 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來完成,但在這裏我們該如何應用它?

回答

-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()); 
} 
+0

請仔細閱讀問題。 – Hitendra

+0

好的。請正確描述你的問題。這是我的理解 – bmavus

+0

我編輯了第一行,我希望這是有道理的。 – Hitendra

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是第一個參數。)