是否可以使用 ormlite 'randomly' select 来自 table 的一行?
Is it possible to 'randomly' select a row from a table using ormlite?
我想从 table 中 select 一行,但我只想得到一行,并且该行将被随机 select。
I would like to select a row from a table, but I only want to get one row and the row will be selected randomly.
没有任何特殊的方法调用可以执行此操作,但您可以使用 QueryBuilder
来完成此操作。
如果你有一个数字 ID,类似这样的东西应该可以工作:
qb = dao.queryBuilder();
qb.where().raw("id >= (ABS(RANDOM()) % MAX(id) + 1)");
entity = qb.queryForFirst();
Sqlite RANDOM()
returns 一个大的正整数或负整数。 ABS()
使它正好为正,MAX(id)
允许我们然后 mod 最大 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
对象,使用 return 列表的 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();
我想从 table 中 select 一行,但我只想得到一行,并且该行将被随机 select。
I would like to select a row from a table, but I only want to get one row and the row will be selected randomly.
没有任何特殊的方法调用可以执行此操作,但您可以使用 QueryBuilder
来完成此操作。
如果你有一个数字 ID,类似这样的东西应该可以工作:
qb = dao.queryBuilder();
qb.where().raw("id >= (ABS(RANDOM()) % MAX(id) + 1)");
entity = qb.queryForFirst();
Sqlite RANDOM()
returns 一个大的正整数或负整数。 ABS()
使它正好为正,MAX(id)
允许我们然后 mod 最大 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
对象,使用 return 列表的 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();