簡體   English   中英

是否可以使用ormlite從表中“隨機”選擇行?

[英]Is it possible to 'randomly' select a row from a table using ormlite?

我想從表中選擇一行,但是我只想獲得一行,並且該行將被隨機選擇。

我想從表中選擇一行,但是我只想獲得一行,並且該行將被隨機選擇。

沒有任何特殊的方法調用可以執行此操作,但是可以使用QueryBuilder來完成此操作。

如果您有數字ID,則應使用類似的方法:

qb = dao.queryBuilder();
qb.where().raw("id >= (ABS(RANDOM()) % MAX(id) + 1)");
entity = qb.queryForFirst();

Sqlite RANDOM()返回一個大的正整數或負整數。 ABS()使其為正, MAX(id)允許我們根據最大id值進行調制。 +1允許我們實際選擇最大id行。

您可以使用queryRaw:

Relation result = null;
String query = "SELECT * from relations ORDER BY RANDOM() LIMIT 1";
try {
    result = queryRaw(query, getRawRowMapper()).getFirstResult();
} catch (SQLException e) {
    e.printStackTrace();
}

我實際上所做的是從數據庫中獲取選定項目的List <>,然后使用Random對象,將返回列表的size()用作maxInt 是的,我確實檢查了空值。

Dao dao = getHelper().getObjectDao();
PreparedQuery<Object> query = dao.queryBuilder().[query].prepare();
Object object = null;
List<Object> resultList = dao.query(query);
if(resultList != null && resultList.size() > 0){
    Random random = new Random();
    int selected = random.nextInt(resultList.size() - 1);
    object = resultList.get(selected);
}

這個對我有用:

dao.queryBuilder().orderByRaw("RANDOM()").queryForFirst();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM