sql >> Database >  >> RDS >> SQLite

SQLite-verbinding gelekt hoewel alles is gesloten

Het vetgedrukte lettertype in het citaat komt overeen met dit deel in uw code:

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

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

Benadering #1:gebruik een abstracte fabriek om de SQLiteOpenHelper te instantiëren

Declareer uw databasehelper als een statische instantievariabele en gebruik het patroon van de abstracte fabriek om de singleton-eigenschap te garanderen. De voorbeeldcode hieronder zou u een goed idee moeten geven over hoe u de DatabaseHelper-klasse correct kunt ontwerpen.

De statische fabriek getInstance-methode zorgt ervoor dat er op een bepaald moment slechts éénDatabaseHelper zal bestaan. Als het mInstanceobject niet is geïnitialiseerd, wordt er een gemaakt. Als er al een is gemaakt, wordt deze eenvoudig teruggestuurd.

U moet uw helper-object niet initialiseren met new DatabaseHelper(context) .
Gebruik in plaats daarvan altijdDatabaseHelper.getInstance(context) , omdat het garandeert dat er slechts één database-helper zal bestaan ​​gedurende de gehele levenscyclus van de applicatie.

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. 5 gewoonten voor databasebewaking van succesvolle DBA's

  2. FROM_TZ() Functie in Oracle

  3. De Zombie PerfMon-tellers die nooit sterven!

  4. Wat is NoSQL en hoe wordt het gebruikt?