2013-05-20 3 views
0

여러 행을 업데이트하고 싶습니다. 처럼 만들 상태 = 거짓 상태 = 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()); 
} 

status를 false로 설정하고 새 값을 true로 업데이트하십시오. 검색 한 결과 스위치 케이스로 할 수 있다는 것을 알았지 만 여기 어떻게 적용 할 수 있습니까?

답변

-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을 필요로하는 것이 맞습니다; 이 같은 : 대신 rawQuery를 사용해야하므로

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 클래스는 단지 리터럴 값이 아닌 표현식을 지원합니다

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이 첫 번째 매개 변수입니다.

관련 문제