在SQLite中获取随机记录

Sui*_*ika 4 sqlite random android

我像这样在我的SQLite数据库中获取记录.

spellId = extra.getString("spellId");
DBase db = new DBase(this);
db.open();
String[] data = db.getRecord(Integer.parseInt(spellId));
db.close();
Run Code Online (Sandbox Code Playgroud)

我可以在不使用原始查询和游标的情况下获得此类随机数据吗?

No *_*ame 8

试试这样:

db.rawQuery("SELECT * FROM mainTable ORDER BY RANDOM() LIMIT 1", null);
Run Code Online (Sandbox Code Playgroud)


Rav*_*yal 3

你可以使用Random#nextInt()

String[] data = db.getRecord(new Random().nextInt(num));
Run Code Online (Sandbox Code Playgroud)

其中num属于您的记录 ID 的范围。如果您的 ID 分散且不形成连续范围,则需要调整此解决方案。

实现此目的的方法之一是首先创建一个查询来获取所有主键并将值存储在某个集合中。然后通过使用 生成索引来选择随机密钥Random

String[] data = db.getRecord(IDSet.get(new Random().nextInt(IDSet.size())));
Run Code Online (Sandbox Code Playgroud)

查看文档以获取更多信息。

返回从该随机数生成器的序列中抽取的、在 0(含)和指定值(不包括)之间均匀分布的伪随机 int 值。


如果您正在考虑数据库查询解决方案

一个更好的替代方法ORDER BY RANDOM()是让 SQLite 使用OFFSET.

首先将总行数保存num在某处。

SELECT COUNT(*) AS num FROM spells;
Run Code Online (Sandbox Code Playgroud)

然后在using和 use 查询rnum之间选择一个随机数(0, num)Random

SELECT * FROM spells LIMIT 1 OFFSET rnum;
Run Code Online (Sandbox Code Playgroud)