SQLite
 sql >> база данни >  >> RDS >> SQLite

SQLite Connection изтече, въпреки че всичко беше затворено

Удебеленият шрифт в цитата съответства на тази част във вашия код:

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

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

Подход №1:Използвайте абстрактна фабрика за създаване на инстанция на SQLiteOpenHelper

Декларирайте своя помощник на базата данни като статична променлива на екземпляра и използвайте модела на Abstract Factory, за да гарантирате свойството singleton. Примерният код по-долу трябва да ви даде добра представа как да проектирате правилно класа DatabaseHelper.

Статичният фабричен метод getInstance гарантира, че само един DatabaseHelper ще съществува в даден момент. Ако mInstanceobject не е инициализиран, такъв ще бъде създаден. Ако такъв вече е създаден, той просто ще бъде върнат.

Не трябва да инициализирате своя помощен обект с помощта на new DatabaseHelper(context) .
Вместо това винаги използвайтеDatabaseHelper.getInstance(context) , тъй като гарантира, че само един помощник за база данни ще съществува през целия жизнен цикъл на приложението.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 начина за връщане на Unix Timestamp в SQLite

  2. Добавете месеци към дата в SQLite

  3. selectionArgs в SQLiteQueryBuilder не работи с целочислени стойности в колони

  4. Пулът за връзки за база данни '/data/data/msv_database.db' не можа да предостави връзка. Връзки:0 активни, 1 неактивни, 0 налични

  5. Грешка в SQLiteDatabase, неполезен дневник