Tôi đã tìm thấy nhiều thứ như close the connection
và close the cursor
nhưng tôi làm tất cả những thứ này. Vẫn có những rò rỉ kết nối SQLite và tôi nhận được một cảnh báo như thế này:Kết nối SQLite bị rò rỉ mặc dù mọi thứ đã đóng
A SQLiteConnection object for database was leaked!
Tôi có một người quản lý cơ sở dữ liệu này, mà tôi gọi vào các hoạt động của tôi với đoạn mã sau:
DatabaseManager dbm = new DatabaseManager(this);
Mã của cơ sở dữ liệu của tôi lớp quản lý sau bây giờ:
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();
}
}
Khi tôi gọi một phương thức cơ sở dữ liệu, tôi làm điều sau đây:
public Object getData() {
open();
//... database operations take place ...
close();
return data;
}
Nhưng như tôi đã nói, tôi vẫn nhận được cảnh báo kết nối SQLite bị rò rỉ.
Tôi đang làm gì sai?
Tôi nghĩ Bạn chỉ được đóng DBHelper của bạn, nhưng không phải là cơ sở dữ liệu riêng của mình – Opiatefuchs
Tôi nghĩ bạn nên gọi db.close () quá –
Không quan trọng, nếu tôi làm điều này hay không. Tôi sẽ nhận được tin nhắn. Nhưng tôi đọc ở đâu đó, rằng bạn không cần phải làm điều này, khi bạn gọi dbHelper.close() – flp