在android sqlite中关闭光标有什么意义?

时间:2017-12-10 04:36:45

标签: android sqlite

在阅读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();
}

2 个答案:

答案 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()方法只返回游标中的行数而我们没有从游标中检索任何数据