引用の太字のフォントは、コードのこの部分に対応しています:
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をインスタンス化する
データベースヘルパーを静的インスタンス変数として宣言し、AbstractFactoryパターンを使用してシングルトンプロパティを保証します。以下のサンプルコードは、DatabaseHelperクラスを正しく設計する方法についての良いアイデアを提供するはずです。
静的ファクトリgetInstanceメソッドは、常に1つのDatabaseHelperのみが存在することを保証します。 mInstanceobjectが初期化されていない場合は、作成されます。すでに作成されている場合は、単に返されます。
new DatabaseHelper(context)
を使用してヘルパーオブジェクトを初期化しないでください 。
代わりに、常にDatabaseHelper.getInstance(context)
を使用してください 、アプリケーションのライフサイクル全体で1つのデータベースヘルパーのみが存在することが保証されるためです。
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);
}
}