Android关闭数据库失败

时间:2014-09-21 12:52:21

标签: android android-sqlite android-cursor

使用简单的下面的代码我收到关闭databasecursor

的错误
Database﹕ close() was never explicitly called on database '/data/data/ir.tsms/databases/tsms'
    android.database.sqlite.DatabaseObjectNotClosedException:

我的功能:

public Boolean searchLastID( Long lastID){
    SQLiteDatabase db = this.getReadableDatabase();
    String selectQuery = "SELECT * FROM " + this.RECEIVE_FIELDS_TABLE + " WHERE lastId = ?" ;
    String[] args = {String.valueOf(lastID)};
    Cursor cursor = db.rawQuery(selectQuery, args);
    //db.close();
    return cursor.moveToFirst();
}
取消注释db.close();

Cursor﹕ Finalizing a Cursor that has not been deactivated or closed. database = /data/data/ir.tsms/databases/tsms, table = null, query = SELECT * FROM ReceiveFields WHERE lastId = ?

什么问题以及如何解决这个问题?我找不到任何关于这个问题的文件。感谢

2 个答案:

答案 0 :(得分:0)

使光标成为全局变量 在你的onDestroy方法中关闭光标和数据库

@Override
protected void onDestroy() {
    super.onDestroy();
    cursor.close();
    db.close();
}

答案 1 :(得分:0)

只要您从数据库中检索查询数据,就应该关闭 Cursor 至少停用它(关键字:释放资源)

close()deactivate()方法的Docs上引用两个引号:

#关闭()

  

关闭光标,释放所有资源并制作它   完全无效。与deactivate()不同,对requery()的调用不会   使光标再次有效。

#deactivate()

  

取消激活Cursor,使其上的所有调用都失败,直到requery()为止   调用。 非活动游标比活动游标使用更少的资源。   调用requery()会使光标再次激活。