7

我知道关闭数据库后,游标变为“无效”,这是否也会同时关闭游标?这是否避免了必须做如下所示的事情?

示例 1

 public void String getResultsAndReturnString() {
      String result = "";
      SQLiteDatabase db = dbHelper.getReadableDatabase();
      Cursor cursor = qb.query(db, projection, null, null,
                    null, null, null);
      cursor.close();  <-- explicit cursor close example one
      db.close();
     return result;
  }

示例 2

public void Cursor getResultsAndReturnCursor(){
   SQLiteDatabase db = dbHelper.getReadableDatabase();
   Cursor cursor = qb.query(db, projection, null, null,
                    null, null, null);
   return cursor;
}

public void closeOut(Cursor cursor, SQLiteDatabase dataBase){
     cursor.close();   <-- explicit cursor close example two
     dataBase.close();
}
4

1 回答 1

10

严格意义上的游标并没有通过关闭数据库来关闭(它仍然存在,您可以对其执行操作),但是如您所知,关闭数据库会使游标无用。出于多种原因,您应该在使用完游标后显式关闭它们:

1)正如您所指出的,关闭数据库后,任何剩余的游标都变得“无效”,并且不能依赖于准确的数据;

2) 您将在 LogCat 中看到警告;

3)如果您维护对游标的引用,您将面临内存泄漏的风险;和

4) 关闭不再需要的资源是一种很好的编程习惯。

于 2013-05-20T02:12:31.390 回答