6
を操作getWritableDatabase()毎回を呼び出す必要がありますか:は私がアンドロイドでSQLiteのデータベースについて初心者の質問があり、私はデータ
私は本当に私がデータを操作する書き込み可能なデータベース毎回を取得する必要がありますか?
だから私はこのようなDAO書くことができます。
class Dao {
private final SQLiteDatabase database;
public Dao(SQLiteOpenHelper databaseHelper){
database = databaseHelper.getWritableDatabase();
}
public void insert(...){
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
または私はこのように私のDAOを記述する必要があります実行します。第二のアプローチが正しいものである場合
class Dao {
private final SQLiteOpenHelper databaseHelper;
public Dao(SQLiteOpenHelper databaseHelper){
this.databaseHelper = databaseHelper
}
public void insert(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
を: ない私も
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
database.close();
}
私はそれが01と同じであると推測します?
私はすべてのアクティビティでそれをしたくありません。だから、私はアプリケーションをサブクラス化し、Dao(より具体的にはSQLiteOpenHelper)が一度しかインスタンス化されないようにするために、シングルトンのようなものを実装します。 – sockeqwe
@sockeqwe:あなたは静的としてアプリケーションに入れても構いませんが、 。また、テスト活動をより困難にするでしょう。しかし、あなたが良い慣行や正式なコードテストを気にしなければ、それはうまくいくかもしれません。あなたのコードのどれもが接続を閉じていないことを確認してください。そうでなければ、断続的に接続を取得できないアクティビティーがいくつあるのかはわかりません。 (それが悪い習慣である理由の1つです)。 –