当前位置:首页 > 数据库 > SQlite

android – 显式关闭SQLite数据库中的Cursor,需要还是不需要?

据我所知,在数据库关闭后,光标变为“无效”,是否同时关闭光标?这是否避免必须执行下面显示的操作?

例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();
}

解决方法:

通过关闭数据库(它仍然存在并且您可以对其执行操作)严格意义上不关闭游标,但是如您所知,关闭数据库会使游标无效.出于多种原因,您应该在使用完游标后明确关闭游标:

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

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

3)如果保持对游标的引用,则存在内存泄漏的风险;和

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


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!