【问题标题】:Selecting Random rows with limit in SQLite在 SQLite 中选择有限制的随机行
【发布时间】:2013-07-19 12:41:55
【问题描述】:

我已经经历了很多相关的线程,但我还没有成功。

我不知道我哪里出错了,我有以下方法来获取行。

    public Cursor getallrows (String fid , String sid , String bid , String pid , String limit)
    {
        return db.query(DATABASE_ALLPENLIST, new String[] {"rowpos","Peninnerid","issampled","onesymbol","twosymbol","threesymbol","foursymbol","fivesymbol","buildingid","farmid","sampleid","penid"}, "farmid = "+fid+" and sampleid = "+sid+" and buildingid = "+bid+" and penid = "+pid , null, null, null,"RANDOM()",limit);
    }

但是上面的方法返回了限制中提到的正确行数,但不是随机顺序,它返回限制变量中提到的前 n 行。

这是RANDOM() 区分大小写吗?但我也试过用Random()"RANDOM() LIMIT "+limit 代替第7 个参数。

提前致谢。

【问题讨论】:

  • limit 是什么类型的对象(整数、字符串等)?
  • 是String,我已经作为参数传递给代码中的方法了,请参考。
  • 我的答案对你来说不是1的明确字符串吗?
  • 不,我试过,但它只返回第一行。

标签: android database sqlite random


【解决方案1】:

如果limit 变量是字符串类型,或者您可以像这样显式地使用它,则此查询应该与返回随机行一起使用:

db.query(DATABASE_ALLPENLIST, 
         new String[] {"rowpos","Peninnerid","issampled","onesymbol","twosymbol","threesymbol","foursymbol","fivesymbol","buildingid","farmid","sampleid","penid"}, 
         "farmid = "+fid+" and sampleid = "+sid+" and buildingid = "+bid+" and penid = "+pid ,
         null, 
         null, 
         null,
         "RANDOM()",
         "1");

或尝试原始查询:

db.rawQuery("Select rowpos, Peninnerid , issampled, onesymbol, twosymbol, threesymbol, foursymbol, fivesymbol, buildingid, farmid, sampleid, penid From " + DATABASE_ALLPENLIST + " Order By RANDOM() LIMIT ?", new String[] {limit});

此 API 的说明:Link

【讨论】:

  • 但我想动态地通过限制,我的意思是我有一些计算来找到限制。所以我不能给出“1”。请指教。
  • 我知道这是一个愚蠢的问题,但我不得不问,你的桌子上有不止一行吗?
  • @VIGNESH 你能试试我发布的 rawQuery 看看它是否对你做同样的事情吗?
  • 但它要求 API 级别为 16(即)果冻豆。
  • 等等,rawQuery 不需要 API 16,它是在 API 1 中添加的
猜你喜欢
  • 2011-05-06
  • 2012-08-29
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2014-03-31
  • 2010-12-05
  • 2013-01-26
  • 1970-01-01
相关资源
最近更新 更多