2012-12-08 6 views
0

컴파일 할 업데이트 쿼리를 실행하고 있습니다. 그러나 결과를 테스트 할 때 아무런 변화가없는 것 같습니다. 모든 것이 나에게 잘 보이지만 분명히 잘못된 것이 있습니다. 아무도 내가 누락 된 것을 볼 수 있습니까? SQLite를 처음 접했을 때 간단합니다. 감사!SQLite 업데이트 쿼리가 작동하지 않습니다.

public static Boolean updateHealth (int unitVal, int oldValue, int newValue) { 
    String unit = Integer.toString(unitVal); 
    String oldVal = Integer.toString(oldValue); 
    String newVal = Integer.toString(newValue); 

    System.err.printf("old val: %s, new val: %s\n", oldVal, newVal); 
    SQLiteDatabase db = myDBOpenHelper.getWritableDatabase(); 
    String where = UNIT_COLUMN + " = " + unit + " AND " + HEALTH_COLUMN + " = " + oldVal; 

    Cursor cursor = db.query(UNITS_TABLE, new String[] {UNIT_COLUMN}, where, null, null, null, null); 

    if (cursor != null) { 
     /* the record doesn't exist, cancel the operation */ 
     return false; 
    } 

    ContentValues updatedValues = new ContentValues(); 
    updatedValues.put(HEALTH_COLUMN, newVal); 

    /* SQL query clauses */ 
    String whereArgs[] = null; 

    db.update(UNITS_TABLE, updatedValues, where, whereArgs); 

    return true; 
} 
+0

이 코드를 실행하면 어떻게됩니까? 무슨 일이 일어날 것으로 예상됩니까? 구체적인 예를 들려 줄 수 있습니까? –

+0

'if (cursor! = null)'이 항상 적용되어야합니다. 'Cursor'는 어떤 경우에는 비어있을 수 있습니다.'cursor.getCount() == 0' – zapl

답변

1

커서가 검색 될 때 커서가 null이 아닙니다. 따라서 라인을 바꾸어야합니다 if (cursor != null) {if(!cursor.moveToNext()) {

그런데 업데이트하기 전에 데이터베이스를 쿼리 할 필요가 없습니다. 업데이트를 수행하고 영향을받은 행 수를 확인한 다음 영향을받은 행 수가 0보다 큰 경우 true를 반환하고 그렇지 않으면 false를 반환합니다. 영향을받은 행의 수는 update 메서드에 의해 반환됩니다.

+0

그게 전부입니다. 고맙습니다. 업데이트 쿼리 중에 얼마나 많은 행이 영향을 받는지 확인하는 방법은 매우 궁금합니다. 이 코드를 좀 더 간단하게 만들 수 있습니다. 다시 한 번 감사드립니다! – Alex

관련 문제