sql >> Databasteknik >  >> RDS >> SQLite

SQLite Connection läckte även om allt stängdes

Det fetstilta teckensnittet i citatet motsvarar denna del i din kod:

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

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

Tillvägagångssätt #1:Använd en abstrakt fabrik för att instansiera SQLiteOpenHelper

Deklarera din databashjälpare som en statisk instansvariabel och använd Abstract Factory-mönstret för att garantera singleton-egenskapen. Exempelkoden nedan bör ge dig en bra uppfattning om hur du kan designa DatabaseHelper-klassen på rätt sätt.

Den statiska fabriksmetoden getInstance säkerställer att endast en DatabaseHelper någonsin kommer att existera vid varje given tidpunkt. Om mInstance-objektet inte har initierats kommer ett att skapas. Om en redan har skapats kommer den helt enkelt att returneras.

Du bör inte initiera ditt hjälpobjekt med new DatabaseHelper(context) .
Använd i stället alltidDatabaseHelper.getInstance(context) , eftersom det garanterar att endast en databashjälpare kommer att finnas under hela programmets livscykel.

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. Oracle Data Mining (ODM) – Installation och installation

  2. Hur man släpper flera tabeller i PostgreSQL med hjälp av ett jokertecken

  3. MySQL:är en SELECT-sats skiftlägeskänslig?

  4. Är det möjligt att utföra flera uppdateringar med en enda UPDATE SQL-sats?