Ich fand viele Sachen wie close the connection
und close the cursor
, aber ich mache all diese Sachen. Immer noch die SQLite Anschluss undicht und ich bekomme eine Warnung wie folgt aus:SQLite Verbindung durchgesickert, obwohl alles geschlossen
A SQLiteConnection object for database was leaked!
ich diesen einen Datenbankmanager, die ich mit dem folgenden Code in meiner Tätigkeit nennen:
DatabaseManager dbm = new DatabaseManager(this);
Der Code meiner Datenbank Manager-Klasse folgt jetzt:
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();
}
}
Wenn ich eine Datenbank-Methode aufrufen, das tue ich das folgende:
public Object getData() {
open();
//... database operations take place ...
close();
return data;
}
Aber wie gesagt, ich bekomme immer noch diese SQLite-Verbindung durchgesickert Warnung.
Was mache ich falsch?
Ich denke, Sie schließen nur Ihre DBHelper, aber nicht die Datenbank selbst – Opiatefuchs
Ich denke, Sie sollten nennen db.close () too –
Egal, ob ich das mache oder nicht. Ich werde die Nachricht trotzdem bekommen. Aber ich habe irgendwo gelesen, dass du das nicht tun musst, wenn du dbHelper.close() aufruft – flp