在读取sqlite方法以使用游标读取行时,我了解到从游标检索数据后,我们应该关闭游标以避免任何内存泄漏,但是在这里我怀疑在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();
}
解决方法:
这是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不提供此类保证,此行为以后可能会更改.
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!