0

コンパイルする更新クエリを実行しています。しかし、結果をテストすると、変更はないようです。私にはすべて問題ないように見えますが、明らかに何かが間違っています。誰でも私が欠けているものを見ることができますか?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;
}
4

1 に答える 1

1

行が取得されない場合、カーソルは null ではありません。したがって、行を次のように置き換えるif (cursor != null) {必要if(!cursor.moveToNext()) {

があります。ちなみに、更新する前にデータベースにクエリを実行する必要はありません。更新を実行して、影響を受けた行の数を確認し、影響を受けた行の数が > 0 の場合は true を返し、それ以外の場合は false を返します。影響を受ける行の数は、メソッドによって返されupdateます。

于 2012-12-08T00:21:19.680 に答える