Android SQLite ORDER BY Funktioniert nicht
Ich habe eine sehr einfache situation:
Ich habe eine Tabelle mit rund 5k Zeilen:
CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "name" TEXT NOT NULL , "def" TEXT NOT NULL, "rand" INTEGER)
Welches ich regelmäßig update mit "UPDATE-Worte-SET rand=random()"
In android, wenn ich einen cursor erstellen, mit rawQuery() mit dem folgenden:
SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC;
Den zurückgegebenen cursor nicht die Iteration in der richtigen Reihenfolge. E. g. es wird die Ausgabe der Spalten mit rand-Werte in der folgenden Reihenfolge:
-1298882092
-2138143484
-1115732861
118839193
...
Weiß jemand, was ist denn hier Los? Sollte dies nicht funktionieren? Wenn ich das exakt gleiche Abfrage in SQLiteManager es gibt die Ergebnisse in der richtigen Reihenfolge, so scheint es android/cursor-spezifisch.
UPDATE:
Hier ist der code in android, ich habe versucht, mehrere Möglichkeiten:
Versuch 1:
Cursor cursor = db.rawQuery("SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC", new String[]{});
Versuch 2:
Cursor cursor = db.query("words", new String[]{"id", "name", "def", "rand"},
null, null, null, null, "rand ASC");
In beiden Fällen, die ich Durchlaufen, wie die folgenden:
while(cursor.moveToNext()) {
...
Log.i("Test", cursor.getInt(3));
...
}
- Nicht auf Android, aber es scheint zu funktionieren hier: ideone.com/GEnG3
- Ja es funktioniert im sqlitemanager als gut, so dass ich denke, es ist android-spezifisch. Der eigentliche Fall hat auch 5k Zeilen und ein index, der die rand-Spalte.
- Kannst du die Android-code?
- Hinzugefügt den code in die Frage.
- Wie oft aktualisieren Sie die rand-Spalte? Sind Sie sicher, dass dies nicht die Quelle des Problems?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gelöst, es war eine einfache Aufsicht. Die random () - Funktion gibt einen Wert, der größer als ein java-Datentyp "int". Dies war die Herstellung überlauf. Geschaltet getLong() und alles funktioniert einwandfrei. Der cursor korrekt Durchlaufen alle zusammen.
Hatte ich ein problem mit android-cursor, rawquery und group by. Das Ergebnis war nicht bestellt.
Dies ist die Tabelle:
Und das war mir-Abfrage:
und hier, wie ich es verwenden:
Wo ich mir sicher bin, dass qid ist eine ganze Zahl, und um ich.titolo ASC oder DESC
Ist die einzige Lösung, die für mich gearbeitet ist, ändern Sie die Abfrage, verschieben der Gruppe von clausole in die rawquery call-Methode: