从android中的sqlite数据库中获取随机数据

时间:2016-07-27 04:03:19

标签: android sqlite android-sqlite

我对android很新,所以我有这个功能,需要从我的数据库中选择一个随机记录,所以我做的是在我的dbhelper中创建一个函数就像这样

更新了选择随机记录的功能

 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..");之后没有数据。知道我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

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

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

但是,一个随机重新排序行的查询,然后只取第一个,会更简单:

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