2016-07-27 110 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