SQLite
 sql >> Base de données >  >> RDS >> SQLite

SQLite Connection a fui bien que tout soit fermé

La police en gras dans la citation correspond à cette partie de votre code :

private DatabaseManager open() throws SQLException {
    dbHelper = new DatabaseHelper(context);
    db = dbHelper.getWritableDatabase();

de :http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html

Approche #1 :Utiliser une usine abstraite pour instancier theSQLiteOpenHelper

Déclarez votre assistant de base de données en tant que variable d'instance statique et utilisez le modèle Abstract Factory pour garantir la propriété singleton. L'exemple de code ci-dessous devrait vous donner une bonne idée de la manière de concevoir correctement la classe DatabaseHelper.

La méthode getInstance de la fabrique statique garantit qu'un seul DatabaseHelper existera à un moment donné. Si le mInstanceobject n'a pas été initialisé, un sera créé. Si un a déjà été créé, il sera simplement renvoyé.

Vous ne devez pas initialiser votre objet d'assistance en utilisant avec new DatabaseHelper(context) .
À la place, utilisez toujoursDatabaseHelper.getInstance(context) , car il garantit qu'un seul assistant de base de données existera tout au long du cycle de vie de l'application.

public static class DatabaseHelper extends SQLiteOpenHelper { 

  private static DatabaseHelper mInstance = null;

  private static final String DATABASE_NAME = "database_name";
  private static final String DATABASE_TABLE = "table_name";
  private static final int DATABASE_VERSION = 1;

  public static DatabaseHelper getInstance(Context ctx) {

    // Use the application context, which will ensure that you 
    // don't accidentally leak an Activity's context.
    // See this article for more information: http://bit.ly/6LRzfx
    if (mInstance == null) {
      mInstance = new DatabaseHelper(ctx.getApplicationContext());
    }
    return mInstance;
  }

  /**
   * Constructor should be private to prevent direct instantiation.
   * make call to static factory method "getInstance()" instead.
   */
  private DatabaseHelper(Context ctx) {
    super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
  }
}