私は現在、さまざまなスレッドからアクセスされるdatabasehalperクラスを実装しているので、基本的にシングルトンであり、次のようにアクセスされます。
public class HistoryDatabaseHelper extends SQLiteOpenHelper{
private static HistoryDatabaseHelper mInstance=null;
public static HistoryDatabaseHelper getInstance(Context context){
if(mInstance==null)
mInstance=new HistoryDatabaseHelper(context.getApplicationContext());
return mInstance;
}
したがって、パブリックコンストラクターはなく、これがヘルパーにアクセスする唯一の方法です。
今私の質問は、操作を実行しようとするたびにデータベースを開く必要があるということです。たとえば、ヘルパークラスの次のmenmber関数について考えてみます。
public void deleteContact(String staticUrl) {
SQLiteDatabase db = this.getWritableDatabase(); // does this open a new connection each time?
// and invade the whole purpose of
//creating singleton helper
db.delete(TABLE_DOWNLOAD_HISTORY, KEY_STATIC_URL + " = ?",
new String[] { staticUrl });
db.close();
}
したがって、これは適切な方法ですか、それとも次のようにデータベースを一度開く必要がありますか?
public static HistoryDatabaseHelper getInstance(Context context){
if(mInstance==null){
mInstance=new HistoryDatabaseHelper(context.getApplicationContext());
mInstance.open(); // here
}
return mInstance;
}
もしそうなら、どこでデータベースを閉じる必要がありますか?