Android 在SQLite中获取随机记录
我像这样在SQLite数据库中获取记录Android 在SQLite中获取随机记录,android,sqlite,random,Android,Sqlite,Random,我像这样在SQLite数据库中获取记录 spellId = extra.getString("spellId"); DBase db = new DBase(this); db.open(); String[] data = db.getRecord(Integer.parseInt(spellId)); db.close(); 我可以在不使用原始查询和游标的情况下获得这样的随机数据吗?您可以使用random\nextInt()like String[] data = db.getRecord
spellId = extra.getString("spellId");
DBase db = new DBase(this);
db.open();
String[] data = db.getRecord(Integer.parseInt(spellId));
db.close();
我可以在不使用原始查询和游标的情况下获得这样的随机数据吗?您可以使用random\nextInt()
like
String[] data = db.getRecord(new Random().nextInt(num));
其中num
在记录ID的范围内。您需要调整此解决方案,以防您的ID支离破碎且不形成连续的范围
其中一种方法是首先创建一个查询来获取所有主键并将值存储在某个集合中。然后通过使用random
生成索引来拾取随机键
String[] data = db.getRecord(IDSet.get(new Random().nextInt(IDSet.size())));
有关更多信息,请查看
返回从该随机数生成器的序列中提取的0(包括)和指定值(排除)之间的伪随机、均匀分布的int值
如果您正在考虑DB查询解决方案 使用
orderbyrandom()
(已知它不能随着表中行数的增加而很好地扩展)的更好替代方法是让SQLite使用偏移量返回一个随机行
首先将总行数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);
但我的数据库中的记录数并不是恒定的。游标的getCount()是否以这种方式访问db?它是表的主键还是像已获取db记录列表中的索引一样工作?它是。我使用上一个活动中的包获取它。我刚刚添加了一个DB查询解决方案。欢迎使用Suika。如果您愿意,请也进行一次向上投票:)这将起作用,但不建议用于大型表Order By Random()
与行数的比例不匹配。可能存在重复的