2016-07-27 11 views
0

bin ich ziemlich neu, so dass ich auf Android haben diese Funktionalität, die einen zufälligen Datensatz aus der Datenbank auswählen muss, um was ich getan habe eine Funktion in meinem dbhelper wie dieseErste Zufallsdaten von SQLite-Datenbank in android

schaffen war

aktualisiert Funktion zufällige Datensätze

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; 
} 

i hinzugefügt Protokolle auf die Gesamtgröße in meiner Datenbank zu wählen, wo ich korrekte Daten bekommen, aber wenn ich es auf die Suchabfrage für meine zufälligen Datensatz verwenden die Größe ist es ergab 0 Irgendeine Idee, was ist falsch mit meiner Select-Abfrage?

dann in meiner anderen Klasse im Java versuchen, ob zu sehen oder nicht, ich bin die Zufallsdaten immer hier ist der Code, den ich habe, ist

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); 
     } 

die Sache im nicht immer alles nur um die Log.d("Reading: " , "RANDOM.."); keine danach Daten . Irgendeine Idee, was ich falsch mache?

+0

prüfen, was die Größe der 'randome' Liste –

+0

Versuchen Sie Debug-Methode„getSOMERESTAURANT() ".check selectQuery, während Schleife Bedingungen –

+0

hi Ich habe die Größen zum Protokoll hinzugefügt und das Problem war auf meine select Abfrage für einen zufälligen Datensatz jede Idee, was mein Fehler ist? Danke – BourneShady

Antwort

2

OFFSET <count> Überspringt alle Zeilen, und dann gibt es keine Zeile mehr, um zurückzukehren.

Um eine zufällige Zeile zu erhalten, müssten Sie einen zufälligen Betrag überspringen, der kleiner als die Anzahl der Zeilen ist.

Aber eine einzelne Abfrage, die die Zeilen zufällig neu ordnet, und nimmt dann nur die erste, wäre einfacher:

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

Hallo danke, ich habe das verwendet, aber ich lese auch von einigen Stapeln, die es gibt ein Problem bei der Verwendung von Random() wie für große Tableß. hat für mich sowieso funktioniert. Vielen Dank! – BourneShady

Verwandte Themen