Android SQLite ORDER BY不起作用

ghe*_*ton 7 sql sqlite android cursor

我有一个非常基本的情况:

我有一个大约5k行的表:

CREATE TABLE "words" ("id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , "name" TEXT NOT NULL , "def" TEXT NOT NULL, "rand" INTEGER)
Run Code Online (Sandbox Code Playgroud)

我使用"UPDATE words SET rand = random()"定期更新

在android中,当我使用rawQuery()使用以下代码创建游标时:

SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC;
Run Code Online (Sandbox Code Playgroud)

返回的游标不按正确的顺序迭代.例如,它将按以下顺序输出具有rand值的列:

-1298882092
-2138143484
-1115732861
118839193
...
Run Code Online (Sandbox Code Playgroud)

有谁知道这里发生了什么?这不应该工作吗?如果我在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[]{});
Run Code Online (Sandbox Code Playgroud)

尝试2:

Cursor cursor = db.query("words", new String[]{"id", "name", "def", "rand"},
            null, null, null, null, "rand ASC");
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我迭代如下:

while(cursor.moveToNext()) {
    ...
    Log.i("Test", cursor.getInt(3));
    ...
}
Run Code Online (Sandbox Code Playgroud)

ghe*_*ton 6

我解决了它,是一个简单的疏忽.random()函数返回的值可以大于java int数据类型.这产生溢出.切换到getLong(),一切正常.光标一直在正确迭代.