Androidアプリケーションでsqliteデータベースにアクセスするには、これらの実装のどれが優れているかを確認しようとしています
実装 1
SqliteOpenHelper を拡張し、シングルトン パターンを使用する DatabaseHelper クラスを使用します。まれに、データベースが閉じられているためにクラッシュすることがあります。少しいらいらしましたが、物事の壮大な計画と私が持っているプロジェクトの数でマイナーだったという理由だけで、私は彼らを通過させました.
public class DBHelper extends SQLiteOpenHelper {
private static DBHelper instance;
private final String CREATE_HEALTH_DATA_TABLE = "CREATE TABLE IF NOT EXISTS my_table ( "
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ MT_FIELD_NAME + " TEXT NOT NULL );";
private DBHelper getInstance(Context c) {
if (instance == null) {
instance = new DBHelper(c);
}
return instance;
}
private DBHelper(Context c) {
super(c, "my_database.sqlite", null, 0);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
実装 2
これを実装するもう 1 つの方法は、ヘルパー クラスを Content Provider クラス内の静的内部クラスとして作成することです。これは、サンプルのメモ帳の例で行われる方法です。
public class DataProvider extends ContentProvider {
/*..Content provider implementation only dbhelper variable and onCreate are shown */
private MTDBHelper dbHelper;
@Override
public boolean onCreate() {
dbHelper = new DBHelper(getContext());
return true;
}
private static class DBHelper extends SqliteOpenHelper {
/// Implementation without making it a singleton
}
}
これらのうちどれが物事のより良いまたは標準的な方法であり、その理由. これは内部のプライベート クラスであるため、2 番目のアプローチであると推測していますが、専門家の意見が必要です。
それが問題になる場合は、常にコンテンツ プロバイダーを使用しています。
ありがとうございました