SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Kết nối SQLite bị rò rỉ mặc dù mọi thứ đã đóng lại

Phông chữ in đậm trong trích dẫn tương ứng với phần này trong mã của bạn:

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

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

Cách tiếp cận # 1:Sử dụng một Nhà máy Tóm tắt để Khởi tạo theSQLiteOpenHelper

Khai báo trình trợ giúp cơ sở dữ liệu của bạn dưới dạng biến phiên bản tĩnh và sử dụng mẫu Abstract Factory để đảm bảo thuộc tính singleton. Mã mẫu bên dưới sẽ cung cấp cho bạn một ý tưởng hay về cách thiết kế chính xác lớp DatabaseHelper.

Phương thức getInstance của nhà máy tĩnh đảm bảo rằng chỉ có oneDatabaseHelper sẽ tồn tại tại bất kỳ thời điểm nào. Nếu mInstanceobject chưa được khởi tạo, một đối tượng sẽ được tạo. Nếu một cái đã được tạo thì nó sẽ đơn giản được trả lại.

Bạn không nên khởi tạo đối tượng trợ giúp của mình bằng new DatabaseHelper(context) .
Thay vào đó, hãy luôn sử dụng DatabaseHelper.getInstance(context) , vì nó đảm bảo rằng chỉ có trình trợ giúp onedatabase sẽ tồn tại trong toàn bộ vòng đời của ứng dụng.

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. Cách cập nhật dữ liệu hiện có bằng SQLite

  2. lỗi chèn android.database.sqlite.sqliteconstraintexception mã lỗi 19 ràng buộc không thành công

  3. SQLite ngoại trừ

  4. Ràng buộc DUY NHẤT trong SQLite

  5. Chọn SQLite