我从设备复制数据库文件并在 SQLite 客户端中打开。SQLite 客户端中的相同查询按预期返回结果,但 Android有时返回空游标。我无法解释为什么有时游标会返回 0 行。SQLiteDatabase 对象总是按应用程序打开,因为每个任务对数据库有很多请求。
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 {
}
更新
SQL查询(更改了列名和表名,重命名没有影响):
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
就像我说的:这个查询按我的预期运行,并在桌面 SQLite 客户端中返回结果。
更新
此外,尽管所有 Cursor 和 SQLiteDatabase 对象都被try...finally包装并关闭,但我收到了这种警告。
W/CursorWrapperInner(10374): Cursor finalized without prior close()