带有 ORDER BY 的 Android SQLite 负值

标签 android 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)

我使用“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));
    ...
}

最佳答案

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

关于带有 ORDER BY 的 Android SQLite 负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845201/

相关文章:

java - 从被调用方法内的函数返回

java - 为什么 PrepareStatement 没有生成正确的 SQL 查询?

c# - 这段代码有什么问题。为什么我不能使用 SqlConnection?

c# - 无法在 Xamarin 中安装 SQLite-Net-pcl

Android SQLite 连接查询

android - 放大 KitKat WebView 后不再有文本重排

android - Android 上的短信自动回复

SQL Server 2014 性能 - 参数化 SQL 与文字

python - 如何修复 'django.db.utils.OperationalError: near "无“: syntax error' db. sqlite3?

android - 如何访问短信和联系人数据?