在 SQLite 中获取随机记录
Get random record in SQLite
我像这样在我的 SQLite 数据库中获取记录。
spellId = extra.getString("spellId");
DBase db = new DBase(this);
db.open();
String[] data = db.getRecord(Integer.parseInt(spellId));
db.close();
我可以在不使用原始查询和游标的情况下获取这样的随机数据吗?
你可以用Random#nextInt()
喜欢
String[] data = db.getRecord(new Random().nextInt(num));
其中 num
在您的记录 ID 范围内。如果您的 ID 零散且不形成连续范围,您将需要调整此解决方案。
其中一种方法是首先创建一个查询来获取所有主键并将值存储在某个集合中。然后通过使用 Random
.
生成索引来选择一个随机密钥
String[] data = db.getRecord(IDSet.get(new Random().nextInt(IDSet.size())));
查看 docs 了解更多信息。
Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.
如果您正在考虑数据库查询解决方案
使用 ORDER BY RANDOM()
的一个更好的替代方法(众所周知,随着 table 中行数的增加,它不能很好地扩展)是让 SQLite return 使用随机行一个 OFFSET
.
先把总行数num
保存在某处。
SELECT COUNT(*) AS num FROM spells;
然后使用 Random
在 (0, num)
之间选择一个随机数 rnum
并使用查询
SELECT * FROM spells LIMIT 1 OFFSET rnum;
这样试试:
db.rawQuery("SELECT * FROM mainTable ORDER BY RANDOM() LIMIT 1", null);
我像这样在我的 SQLite 数据库中获取记录。
spellId = extra.getString("spellId");
DBase db = new DBase(this);
db.open();
String[] data = db.getRecord(Integer.parseInt(spellId));
db.close();
我可以在不使用原始查询和游标的情况下获取这样的随机数据吗?
你可以用Random#nextInt()
喜欢
String[] data = db.getRecord(new Random().nextInt(num));
其中 num
在您的记录 ID 范围内。如果您的 ID 零散且不形成连续范围,您将需要调整此解决方案。
其中一种方法是首先创建一个查询来获取所有主键并将值存储在某个集合中。然后通过使用 Random
.
String[] data = db.getRecord(IDSet.get(new Random().nextInt(IDSet.size())));
查看 docs 了解更多信息。
Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.
如果您正在考虑数据库查询解决方案
使用 ORDER BY RANDOM()
的一个更好的替代方法(众所周知,随着 table 中行数的增加,它不能很好地扩展)是让 SQLite return 使用随机行一个 OFFSET
.
先把总行数num
保存在某处。
SELECT COUNT(*) AS num FROM spells;
然后使用 Random
在 (0, num)
之间选择一个随机数 rnum
并使用查询
SELECT * FROM spells LIMIT 1 OFFSET rnum;
这样试试:
db.rawQuery("SELECT * FROM mainTable ORDER BY RANDOM() LIMIT 1", null);