【问题标题】:Random() in sqlite and Android sdksqlite 和 Android sdk 中的 Random()
【发布时间】:2011-12-03 18:07:29
【问题描述】:

我想从 Android 中的 app sqlite 数据库中提取随机行。我知道,使用 sqlite,您可以选择随机行:

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;

在应用程序中,我有这样的东西

return mDb.query(TABLE, new String[] {"col1", "col2"}, null, null, null, null, "Random()", "2");

这是为了在表 TABLE 中提取两个随机行。但它不断返回相同的行。声明有什么问题?

谢谢

【问题讨论】:

  • 我没有研究过这个特定的 Random(),但我知道一些 Random() 是基于时间的,如果它在时钟周期内执行,那么 Random() 不会返回同样的事情?

标签: android sqlite


【解决方案1】:

试试这个

Cursor cursor = this.db.query("YourTable Order BY RANDOM() LIMIT 1",
                new String[] { "*" }, null, null, null, null, null);

【讨论】:

  • 我不明白为什么会这样(另外,最新版本的 android 正在强制转义,所以这可能会停止工作)
【解决方案2】:

如下设置查询:

public Cursor getRandomDataItemFromDb(String tableName, int limit) {
    Cursor cursor = db.rawQuery("SELECT * FROM " + tableName+ " ORDER BY RANDOM() LIMIT " + limit, null);
    if (cursor.moveToFirst()) {
        return cursor;
    }
    return cursor;
}

完成

【讨论】:

  • 这个评论肯定是过了一段时间,但你的回答对我帮助很大!
【解决方案3】:

像这样使用 orderBy 子句

Cursor cursor = db.query(TABLE_NAME, projection, selection, selectionArgs, null, null, "RANDOM() limit 1");

【讨论】:

    【解决方案4】:

    在查询中使用随机函数作为字符串。我在下面给了你一个样本。

    String orderBy = "RANDOM()";
    Cursor dbc = this.db.query(TABLE_NAME, columnArray, null, null, null, null, orderBy, null);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2011-01-11
      • 2023-03-15
      • 2014-08-07
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多