2016-07-27 78 views
0

我是相当新到Android,所以我有这个功能,需要从我的数据库选择随机记录,以便我所做的就是在我的dbhelper创建一个函数就这样充分利用SQLite数据库随机数据在Android中

更新功能来选择随机记录

public List<Restaurant> getSOMERESTAURANT() 
{ 
    List<Restaurant> restaurants = new ArrayList<Restaurant>(); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor c = db.rawQuery("SELECT * FROM " + TABLE_RESTAURANT ,null); 
    int cnt = c.getCount(); 
    //get total number of records in the database 
    String offsetSize = "" + c.getCount(); 
    Log.d("Offset Size: " , offsetSize); 

    //String selectQuery = "SELECT * FROM " + TABLE_RESTAURANT + " LIMIT 1 OFFSET " + cnt; 
    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_RESTAURANT + " LIMIT 1 OFFSET " + cnt, null); 

    //check if there was something selected 
    String scnt = "" + cursor.getCount(); 
    Log.d("Size: " , scnt); 

    if (cursor.moveToFirst()) { 
     do { 
      Restaurant rest = new Restaurant(); 
      rest.setrID(Integer.parseInt(cursor.getString(0))); 
      rest.setArea(cursor.getString(1)); 
      rest.setRestaurant(cursor.getString(2)); 

      restaurants.add(rest); 
     } while (cursor.moveToNext()); 
    } 
    return restaurants; 
} 

我添加日志我的数据库总规模在那里我得到正确的数据,但是当我用它来搜索查询我的随机记录它返回的大小为0有关我的选择查询出了什么问题的任何想法?

然后在我的其他Java类我尝试看看是否我在这里获得随机数据是代码,我有

Log.d("Reading: " , "RANDOM.."); 
     List<Restaurant> randome = db.getSOMERESTAURANT(); 
     for(Restaurant r : randome) 
     { 
      String rdata = r.getrID() + " " + r.getArea() + " " + r.getRestaurant(); 
      Log.d("Restaurants" , rdata); 
     } 

的事情是即时消息没有得到任何东西只是Log.d("Reading: " , "RANDOM..");没有事后的数据。任何想法,我做错了什么?

+0

检查什么的'randome'列表 –

+0

大小尝试调试方法“getSOMERESTAURANT() “.check selectQuery,while循环退出条件 –

+0

嗨我添加了大小的日志和问题是我的选择查询随机记录任何想法我的错误是什么?谢谢 – BourneShady

回答

2

OFFSET <count>跳过所有行,然后没有剩下的行可以返回。

要获得一个随机行,您必须跳过一个小于行数的随机数。

但是,随机地重排,然后只需要第一个查询,会更简单:

SELECT ... ORDER BY random() LIMIT 1; 
+0

嗨,感谢我使用这个,但我也从一些堆栈读取,一个关于使用random()类似于大型tabless的问题。反正为我工作。谢谢! – BourneShady