我这样从SQLite数据库中获取记录。
spellId = extra.getString("spellId");
DBase db = new DBase(this);
db.open();
String[] data = db.getRecord(Integer.parseInt(spellId));
db.close();
我能否在不使用原始查询和游标的情况下获取像这样的随机数据?
试试这样:
db.rawQuery("SELECT * FROM mainTable ORDER BY RANDOM() LIMIT 1", null);
Order By Random()
在处理行数较多的情况下性能不佳。 - Ravi K ThapliyalRandom#nextInt()
来进行操作。String[] data = db.getRecord(new Random().nextInt(num));
这段文本涉及到IT技术,介绍了如何确定 num
在记录ID范围内的方法。如果您的ID不是连续的,则需要针对性地调整此解决方案。
为了实现这一目标,您可以首先创建一个查询,以获取所有主键并将这些值存储在某个集合中。然后使用 Random
生成索引来选择一个随机的键。
String[] data = db.getRecord(IDSet.get(new Random().nextInt(IDSet.size())));
返回一个伪随机的、均匀分布的int值,在0(包含)和指定值(不包含)之间,从此随机数生成器的序列中绘制。
使用ORDER BY RANDOM()
不是一个很好的选择(随着表中行数的增加,它已知不会扩展得很好),而是使用OFFSET
让SQLite返回一行随机行。
首先将总行数num
保存在某个地方。
SELECT COUNT(*) AS num FROM spells;
然后使用Random
选择一个介于(0, num)
之间的随机数rnum
,并使用该查询。
SELECT * FROM spells LIMIT 1 OFFSET rnum;
spellId
是该表的主键还是像在获取数据库记录列表时的索引一样工作? - Ravi K Thapliyal