我目前正在实现一个 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;
}
所以没有公共构造函数,这是访问 helper 的唯一方法。
现在我的问题是每次我尝试执行任何操作时是否应该打开数据库。例如,考虑帮助类的以下 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;
}
如果是这样,那么我们应该在哪里关闭数据库?