Java 数据库的SQLiteConnection对象泄漏!请修复您的应用程序
我的申请给我这个警告 数据库的SQLiteConnection对象 “+data+data+com\u example\u test+database”被泄露!请修理 您的应用程序将正确结束正在进行的事务并关闭 当不再需要数据库时,请将其删除 但每次使用后,我都会关闭db对象和光标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 {
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();
}