我在 SQLite Android
中有一个表格table name- score
columns- rank time moves
我想增加那些时间大于给定时间的记录的排名,所以我写了这两个代码。
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);
在这两种情况下都没有更新。谁能说我错在哪里?这两个片段都是正确的更新方式吗?如果其中一个或两个都错了,那么请提一下哪一个错了?
答案 0 :(得分:0)
如果KEY_RANK
是字符串,您似乎正在尝试将列名设置为string + 1
。
我相信你应该首先找出该列中的值,然后递增它,然后将其重新设置。
我不确定你是否可以在一行中做到这一点。
答案 1 :(得分:0)
第二种选择是这样做的方法。但是你需要使用 execSQL ,因为你不期望任何光标作为回报。
db.execSQL("UPDATE "+ TABLE_NAME2 + " SET "+ KEY_RANK + " = " + KEY_RANK +
" + 1 WHERE " + KEY_TIME_ELAPSED + " >= " + time + ";");
答案 2 :(得分:0)
要进行调试,您可以尝试执行数据库查询,以获取要更新的信息,以便您可以查看它的内容。 (“SELECT * FROM”+ TABLE_NAME2 +“WHERE”+ KEY_TIME_ELAPSED +“> =”+ time +“;”)
除此之外:如果你正在使用beginTransaction(),请确保有一个endTransaction()。