0

SQLiteAndroidにテーブルがあります

table name- score
columns- rank      time      moves

ある時間よりも時間が長いレコードのランクを上げたいので、この2つのコードを記述しました。

ContentValues updatedValue = new ContentValues();
updatedValue.put(KEY_RANK, KEY_RANK+1); //KEY_RANK is a final string "rank" column name
db.update(SCORE, updatedValue, KEY_TIME_ELAPSED + ">=" + time, null); //KEY_TIME_ELAPSED = "time" 

およびその他のスニペットは

db.rawQuery("UPDATE "+ TABLE_NAME2 + " SET "+ KEY_RANK + " = " + KEY_RANK + " + 1 WHERE " + KEY_TIME_ELAPSED + " >= " + time + ";", null);

どちらの場合も、更新されていません。誰かが私がどこが間違っているかを言うことができますか?私の場合、両方のスニペットを更新する正しい方法ですか?一方または両方が間違っている場合は、どちらが間違っているかを教えてください。

4

3 に答える 3

0

が文字列の場合KEY_RANK、列名をに設定しようとしているようstring + 1です。

最初にその列の値を見つけ、次にそれをインクリメントしてから、元に戻す必要があると思います。

それが一行でできるかどうかはわかりません。

于 2012-04-10T07:09:03.767 に答える
0

2番目のオプションはそれを行う方法です。ただし、カーソルが返されることを期待していないため、execSQLを使用する必要があります。

db.execSQL("UPDATE "+ TABLE_NAME2 + " SET "+ KEY_RANK + " = " + KEY_RANK + 
" + 1 WHERE " + KEY_TIME_ELAPSED + " >= " + time + ";");
于 2012-04-10T07:11:13.927 に答える
0

デバッグするには、更新する情報を取得するdbクエリを実行して、取得内容を確認することができます。("SELECT * FROM" + TABLE_NAME2 + "WHERE" + KEY_TIME_ELAPSED + "> ="+時間+";")

それ以外:beginTransaction()を使用している場合は、endTransaction()があることを確認してください。

于 2012-04-10T07:17:00.037 に答える