Mam bardzo podstawowe sytuacji:Android SQLite ORDER BY nie działa
Mam tabeli z około 5k rzędów:
CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "name" TEXT NOT NULL , "def" TEXT NOT NULL, "rand" INTEGER)
Który ja okresowo aktualizować za pomocą „Update słowa SET rand = random()”
w Android, gdy tworzę kursora używając rawQuery(), przy użyciu następujących:
SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC;
Zwrócony kursor nie jest iterowany we właściwej kolejności. Na przykład. wyświetli kolumny z wartościami rand w następującej kolejności:
-1298882092
-2138143484
-1115732861
118839193
...
Czy ktoś wie, co się tutaj dzieje? Czy to nie powinno działać? Jeśli uruchomię dokładnie to samo zapytanie w SQLiteManager, zwróci ono wyniki we właściwej kolejności, więc wydaje się, że jest to specyficzne dla androida/kursora.
UPDATE:
Oto kod w android, próbowałem wiele sposobów:
Attempt 1:
Cursor cursor = db.rawQuery("SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC", new String[]{});
Próba 2:
Cursor cursor = db.query("words", new String[]{"id", "name", "def", "rand"},
null, null, null, null, "rand ASC");
W obu przypadkach I iteracyjne jak poniżej:
while(cursor.moveToNext()) {
...
Log.i("Test", cursor.getInt(3));
...
}
Nie na Androida, ale wydaje się działać tutaj: http://ideone.com/GEnG3 –
Tak, to działa również w sqlitemanager, więc myślę, że jest to specyficzne dla Androida. Rzeczywisty przypadek ma również 5k wierszy i indeks na kolumnie rand. – ghempton
Czy możesz opublikować kod Androida? –