【问题标题】:how to pick random a entry from a specific group in a SQLite database如何从 SQLite 数据库中的特定组中随机选择一个条目
【发布时间】:2012-09-06 16:00:07
【问题描述】:

从我的 SQLite 数据库中,我提取了 KEY_ALCOHOL 列中包含“Liquor”的所有条目,如何从所选组中随机选择一个条目?

这是我获得组的方式:

public Cursor getAlcohol(String alcohol) throws SQLException 
{
    Cursor mCursor =
            myDataBase.query(true, DB_TABLE, new String[] {
                    KEY_ROWID,
                    KEY_ALCOHOL, 
                    KEY_TYPE,
                    KEY_BRAND,
                    KEY_PRICE
                    }, 
                    KEY_ALCOHOL + "=?", 
                    new String[] { alcohol },
                    null, 
                    null, 
                    null, 
                    null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

这会返回大约 60 个不同的条目,我需要随机选择一个。

编辑

这是对数据库助手 .java 的第二次尝试

public Cursor getTest(String test) throws SQLException 
{
    Cursor mCursor =
            myDataBase.query(true, DB_TABLE, new String[] {
                    KEY_ROWID,
                    KEY_ALCOHOL, 
                    KEY_TYPE,
                    KEY_BRAND,
                    KEY_PRICE
                    }, 
                    KEY_ALCOHOL + "=?", 
                    new String[] { test },
                    null, 
                    null, 
                    "RANDOM()", 
                    "LIMIT 1");
    return mCursor;
}

这就是我在主要活动中的调用方式:

myDbHelper.openDataBase();
    Cursor c = myDbHelper.getTest("Liquor");
    if (c.moveToFirst())
    {
        do {          
            DisplayTitle(c);
        } while (c.moveToNext());
    }
    myDbHelper.close();

}

public void DisplayTitle(Cursor c)
{
    Toast.makeText(this, 
            "id: " + c.getString(0) + "\n" +
            "ALCOHOL: " + c.getString(1) + "\n" +
            "TYPE: " + c.getString(2) + "\n" +
            "BRAND:  " + c.getString(3) + "\n" +
            "PRICE:  " + c.getString(4),
            Toast.LENGTH_LONG).show();        
} 

【问题讨论】:

标签: android database sqlite random


【解决方案1】:

你需要添加

ORDER BY RANDOM() LIMIT 1;

到您的查询。所以试试这个(未经测试):

        myDataBase.query(true, DB_TABLE, new String[] {
                KEY_ROWID,
                KEY_ALCOHOL, 
                KEY_TYPE,
                KEY_BRAND,
                KEY_PRICE
                }, 
                KEY_ALCOHOL + "=?", 
                new String[] { alcohol },
                null, 
                null, 
                "RANDOM()", 
                "LIMIT 1");

【讨论】:

  • 这到底应该返回什么?从 KEY_ALCOHOL 列中具有相同值的所有条目中随机选择?
  • 您的查询将返回的结果集中的随机条目。
  • 我编辑了我的主要帖子,我试图实现你的方法,但它崩溃并告诉我我有一个“无效的限制”?
  • 只需使用rawQuery(),这比找出query() 方法的所有参数要容易得多。
  • 你能给我举个例子吗?我对整个 SQLite 数据库非常陌生,我仍在尝试掌握它,但我不知道如何 rawQuery()
【解决方案2】:

mCursor.getCount()获取大小,随机选择一个0以内的数字并计数(见How do I generate random integers within a specific range in Java?),然后用mCursor.moveToPosition(randomInt)移动mCursor,得到行,我建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2014-02-01
    • 1970-01-01
    相关资源
    最近更新 更多