0

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

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

4

3 回答 3

0

如果KEY_RANK是一个字符串,您似乎正在尝试将列名设置为string + 1.

我相信您应该首先找出该列中的值,然后将其递增,然后将其设置回来。

我不确定你是否可以在一行中做到这一点。

于 2012-04-10T07:09:03.767 回答
0

第二种选择是这样做的方式。但是您需要使用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 + " >= " + time + ";")

除此之外:如果您使用的是 beginTransaction(),请确保有一个 endTransaction()。

于 2012-04-10T07:17:00.037 回答