Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在SQLite中获取随机记录_Android_Sqlite_Random - Fatal编程技术网

Android 在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

我像这样在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(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()
与行数的比例不匹配。可能存在重复的