0

从我的 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();        
} 
4

2 回答 2

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");
于 2012-09-13T14:27:49.063 回答
0

使用 获取大小mCursor.getCount(),随机选择 0 内的数字并计数(请参阅如何在 Java 中生成特定范围内的随机整数?),然后使用 移动 mCursor mCursor.moveToPosition(randomInt),获取行,我建议。

于 2012-09-13T14:24:47.390 回答