Android SQLite COMMANDE PAR Ne fonctionne pas
J'ai une situation de base:
J'ai une table avec autour de 5k lignes:
CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "name" TEXT NOT NULL , "def" TEXT NOT NULL, "rand" INTEGER)
Qui je périodiquement mise à jour à l'aide de "mettre à JOUR les mots rand=random()"
Dans android, quand je crée un curseur à l'aide de rawQuery() en utilisant les suivantes:
SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC;
Le retour du curseur ne sont pas parcourir dans l'ordre correct. E. g. il sera colonnes de sortie avec rand valeurs dans l'ordre suivant:
-1298882092
-2138143484
-1115732861
118839193
...
Personne ne sait ce qui se passe ici? Ne devrait-ce pas le travail? Si j'exécute exactement la même requête dans SQLiteManager il renvoie les résultats dans le bon ordre, il semble donc android/curseur spécifique.
Mise à JOUR:
Voici le code à android, j'ai essayé de plusieurs façons:
Tentative 1:
Cursor cursor = db.rawQuery("SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC", new String[]{});
Tentative 2:
Cursor cursor = db.query("words", new String[]{"id", "name", "def", "rand"},
null, null, null, null, "rand ASC");
Dans les deux cas je itérer comme suit:
while(cursor.moveToNext()) {
...
Log.i("Test", cursor.getInt(3));
...
}
Ouais, il travaille dans sqlitemanager ainsi donc, je pense que c'est android spécifique. Le cas réel a également 5k lignes et d'un index sur le rand colonne.
Pouvez-vous poster le code Android?
Ajouté le code dans la question.
Combien de fois avez-vous mise à jour le rand de la colonne? Êtes-vous sûr que ce n'est pas la source du problème?
OriginalL'auteur ghempton | 2011-01-30
Vous devez vous connecter pour publier un commentaire.
Je l'ai résolu, c'était une simple surveillance. Le random() renvoie une valeur qui peut être plus grand qu'un java type de données int. Cela a été la production de débordement. Passé à getLong() et tout fonctionne bien. Le curseur a été itération correctement tout au long de.
OriginalL'auteur ghempton
J'ai eu un problème avec android curseur, rawquery et de groupe. Le résultat n'a pas été commandé.
C'est la table:
Et c'était le mien requête:
et voici comment je l'utilise:
Où je suis sûr que qid est un entier, et que j'ai.titolo ASC ou DESC
La seule solution qui a fonctionné pour moi est de modifier la requête de déplacement du groupe par clausole dans le rawquery appel de la méthode:
OriginalL'auteur jedi