我发现很多东西像是 close the connection
和 close the cursor
,但我都已经做了这些事情。 仍然存在SQLite连接泄漏的问题,我收到了如下的警告:
A SQLiteConnection object for database was leaked!
我有一个数据库管理器,我在我的活动中使用以下代码调用:
DatabaseManager dbm = new DatabaseManager(this);
下面是我的数据库管理器类的代码:
public class DatabaseManager {
private static final int DATABASE_VERSION = 9;
private static final String DATABASE_NAME = "MyApp";
private Context context = null;
private DatabaseHelper dbHelper = null;
private SQLiteDatabase db = null;
public static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//create database tables
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//destroy and recreate them
}
}
public DatabaseManager(Context ctx) {
this.context = ctx;
}
private DatabaseManager open() throws SQLException {
dbHelper = new DatabaseHelper(context);
db = dbHelper.getWritableDatabase();
if (!db.isReadOnly()) {
db.execSQL("PRAGMA foreign_keys = ON;");
}
return this;
}
private void close() {
dbHelper.close();
}
}
当我调用数据库方法时,我会执行以下操作:
public Object getData() {
open();
//... database operations take place ...
close();
return data;
}
但如我所说,我仍然收到了SQLite连接泄漏的警告。
我做错了什么?
DatabaseHelper
要是静态的?这可能会导致资源泄漏,因为在没有对DatabaseHelper
的引用时,它仍然持有到数据库的连接。 - MalaKaclose();
行是否总是在成功执行open();
行后执行?您是否记录异常或只是忽略它们? - iCantSeeSharp