在阅读sqlite方法以使用cursor
读取行时,我从光标检索数据后得知,我们应该关闭光标以避免任何内存泄漏,但在这里我有一个疑问在关闭光标后调用cursor.getCount()
下面的代码?关闭光标后检索数据是不是错了?
任何人都可以清除这个疑问!
在此先感谢!!
public int getContactsCount() {
String countQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
// return count
return cursor.getCount();
}
答案 0 :(得分:3)
以下是SQLiteCursor#close()
的源代码:
@Override
public void close() {
super.close();
synchronized (this) {
mQuery.close();
mDriver.cursorClosed();
}
}
以下是SQLiteCursor#getCount()
的源代码:
@Override
public int getCount() {
if (mCount == NO_COUNT) {
fillWindow(0);
}
return mCount;
}
如您所见,行计数似乎存储在变量mCount
中,并且在光标关闭时不会重置此值。从效率的角度来看,这可能是有意义的,因为它节省了不必要地清除状态的需要。
所以看起来在关闭游标之后获取计数确实有效,但你可能不应该依赖它,因为Javadoc没有做出这样的保证,这种行为可能会在以后发生变化。
答案 1 :(得分:0)
<强> Cursor.getCount()强>
在你的查询中我觉得代码没有错,因为getcount()方法只返回游标中的行数而我们没有从游标中检索任何数据