【发布时间】:2011-01-30 20:10:26
【问题描述】:
我有一个非常基本的情况:
我有一个大约 5k 行的表格:
CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "name" TEXT NOT NULL , "def" TEXT NOT NULL, "rand" INTEGER)
我使用“UPDATE words SET rand=random()”定期更新
在 android 中,当我使用 rawQuery() 创建游标时,使用以下内容:
SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC;
返回的游标没有以正确的顺序迭代。例如。它将按以下顺序输出具有 rand 值的列:
-1298882092
-2138143484
-1115732861
118839193
...
有人知道这里发生了什么吗?这不应该工作吗?如果我在 SQLiteManager 中运行完全相同的查询,它会以正确的顺序返回结果,所以这似乎是 android/cursor 特定的。
更新:
这是android中的代码,我尝试了多种方法:
尝试 1:
Cursor cursor = db.rawQuery("SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC", new String[]{});
尝试 2:
Cursor cursor = db.query("words", new String[]{"id", "name", "def", "rand"},
null, null, null, null, "rand ASC");
在这两种情况下,我都会像下面这样迭代:
while(cursor.moveToNext()) {
...
Log.i("Test", cursor.getInt(3));
...
}
【问题讨论】:
-
不适用于 Android,但它似乎在这里工作:ideone.com/GEnG3
-
是的,它也适用于 sqlitemanager,所以我认为它是特定于 android 的。实际案例也有 5k 行和 rand 列上的索引。
-
能贴出安卓代码吗?
-
在问题中添加了代码。
-
您多久更新一次 rand 列?您确定这不是问题的根源吗?
标签: android sql sqlite android-cursor