J'ai copié le fichier de base de données du périphérique et l'ai ouvert dans le client SQLite. Même requête dans le client SQLite renvoie les résultats comme prévu, mais Android parfois renvoie le curseur vide. Je ne peux pas expliquer pourquoi parfois le curseur renvoie 0 lignes. L'objet SQLiteDatabase est toujours ouvert par application car il y a beaucoup de demandes à la base de données pour une tâche.Android. Curseur vide
SQLiteDatabase database = this.getReadableDatabase();
try {
Cursor cursor = database.rawQuery(query, null);
try {
Log.d("Cursor rows count size: ", String.valueOf(cursor.getCount()));
if(cursor.moveToFirst()) {
do {
Long a= cursor.getLong(cursor.getColumnIndex(TableA.a));
String b = String.valueOf(cursor.getInt(cursor.getColumnIndex(TableA.b)));
String c = cursor.getString(cursor.getColumnIndex(TableA.c));
String d = cursor.getString(cursor.getColumnIndex(TableA.d));
String e = cursor.getString(cursor.getColumnIndex(TableA.e));
Object record = new Object (a, b, c, d, e);
list.add(record);
} while (cursor.moveToNext());
}
} finally {
cursor.close();
}
} finally {
}
Mise à jour
requête SQL (modifiée colonne et les noms de tables Il n'y a pas d'influence en raison de changement de nom.):
SELECT
a ,
b ,
c ,
d ,
e
FROM TableA
INNER JOIN TableB ON(TableB._id=TableA.y_id)
LEFT JOIN TableC ON(TableC._id=TableA.x_id)
WHERE active=1 AND xxx>1370090365365 AND xxx<1370867965365
ORDER BY TableA.xxx DESC
Comme je l'ai dit: cette requête fonctionne comme je m'y attendais et renvoie le résultat dans le client SQLite de bureau.
Mise à jour
En plus je reçois cet avertissement aimable malgré tous les curseurs et les objets SQLiteDatabase est enveloppé par ... enfin essayer et fermé.
W/CursorWrapperInner(10374): Cursor finalized without prior close()
partie la plus intéressante est 'query' variables, en fait. Pouvez-vous fournir sa valeur? –
Aussi, dans l'extérieur enfin, fermez la base de données si vous ne l'utilisez pas – FabianCook