sql >> Database teknologi >  >> RDS >> SQLite

SQLite Connection lækket, selvom alt lukkede

Den fed skrifttype i citatet svarer til denne del i din kode:

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

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

Fremgangsmåde #1:Brug en abstrakt fabrik til at instansiere SQLiteOpenHelper

Erklær din databasehjælper som en statisk instansvariabel, og brug Abstract Factory-mønsteret til at garantere singleton-egenskaben. Eksempelkoden nedenfor skulle give dig en god idé om, hvordan du skal designe DatabaseHelper-klassen korrekt.

Den statiske fabrik getInstance-metode sikrer, at kun én DatabaseHelper nogensinde vil eksistere på et givet tidspunkt. Hvis mInstance-objektet ikke er blevet initialiseret, vil der blive oprettet et. Hvis en allerede er oprettet, vil den blot blive returneret.

Du bør ikke initialisere dit hjælpeobjekt med new DatabaseHelper(context) .
Brug i stedet altidDatabaseHelper.getInstance(context) , da det garanterer, at der kun findes én databasehjælper på tværs af hele applikationens livscyklus.

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);
  }
}


  1. Hvordan kombinerer jeg data fra to separate tabeller til en enkelt markør?

  2. Sikkerhedsovervejelser for MariaDB-implementeringer på Hybrid Cloud-miljø

  3. Brug af PgBouncer Connection Pooler til PostgreSQL med ClusterControl 1.8.2

  4. Ydelse af sys.partitioner