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?
InformationsquelleAutor ghempton | 2011-01-30
Schreibe einen Kommentar