Java 数据库的SQLiteConnection对象泄漏!请修复您的应用程序

Java 数据库的SQLiteConnection对象泄漏!请修复您的应用程序,java,android,database,sqlite,Java,Android,Database,Sqlite,我的申请给我这个警告 数据库的SQLiteConnection对象 “+data+data+com\u example\u test+database”被泄露!请修理 您的应用程序将正确结束正在进行的事务并关闭 当不再需要数据库时,请将其删除 但每次使用后,我都会关闭db对象和光标 try { while (cursor.moveToNext()) { ... } } finally {

我的申请给我这个警告

数据库的SQLiteConnection对象 “+data+data+com\u example\u test+database”被泄露!请修理 您的应用程序将正确结束正在进行的事务并关闭 当不再需要数据库时,请将其删除

但每次使用后,我都会关闭db对象和光标

        try {
            while (cursor.moveToNext()) {
              ...
            }
        } finally {
            if (cursor != null && !cursor.isClosed())
                cursor.close();
        }

...
    db.close();
你能帮我弄明白是什么问题吗? 谢谢

更新 我在这篇文章中尝试了这个解决方案


我不再有内存泄漏,这是一个好的解决方案吗?

可能的解决方案

  • 您已
    未提交交易
    您已开始(您应该 启动后始终关闭交易)
  • 检查是否已关闭已打开的游标(如果已关闭) 使用
    Sqlite
    (看起来您已经从发布的代码中完成了此步骤)
  • 同时将
    db.close
    移动到
    finally
  • 在使用
    context.deleteDatabase(…)
    删除数据库,然后使用
    dbHelper.getWritableDatabase()重新创建数据库之前,您尚未对数据库调用
    db.close

只需将
db拖动。关闭
finally
块中。

在我的情况下,错误是在尝试下载新数据时引起的,数据库应该更新


我通过调用
SELECT 0
实例化数据库解决了这个问题。这会导致数据库更新,所以之后我会尝试下载新数据。工作正常。

可能您忘记删除调试的断点 样本:


有些地方不会发生这种情况。问题似乎是以书面形式向DB提出的,您是否有未提交的交易?可能是重复的,谢谢您抽出时间留下答复。不幸的是,它缺少对您所提供内容的描述和解释。请更新您的问题,将其包括在内。您能帮助解决此问题吗
//Inside your SQLite helper class
@Override
public synchronized void close () {
    if (db != null) {
        db.close();
        super.close();
    }
}

//Inside the activity that makes a connection to the helper class
@Override
protected void onDestroy () {
    super.onDestroy();
    //call close() of the helper class
    dbHelper.close();
}