更新SQLIte表中的问题

时间:2012-04-10 07:00:12

标签: android sqlite

我在 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);

在这两种情况下都没有更新。谁能说我错在哪里?这两个片段都是正确的更新方式吗?如果其中一个或两个都错了,那么请提一下哪一个错了?

3 个答案:

答案 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()。