为每个数据库事务操作打开和关闭数据库是一个好习惯吗?让我更清楚你。
我有两种方法,比如
public SQLiteDatabase getDatabase() {
if (database == null || !database.isOpen()) {
database = getWritableDatabase();
}
return database;
}
public void closeDatabase() {
if (database != null && database.isOpen()) {
database.close();
}
}
所以每当我更新/插入或删除时,我都会打开数据库并关闭它。
public void insert(...) {
getDatabase().insert(...);
closeDatabase();
}
public void update(...) {
getDatabase().update(...);
closeDatabase();
}
public void delete(...) {
getDatabase().delete(...);
closeDatabase();
}
请记住,所有这些方法都在DatabaseHelper
类中,该类正在扩展SQLiteOpenHelper
并且存在一个全局变量private SQLiteDatabase database
我将更频繁地执行这些操作(插入/更新/删除)。
所以我的问题是Is it a good practice to open and close database for every transaction? if not, what is the good way? Where and When I have to close my database?
答案 0 :(得分:2)
每次打开和关闭数据库都可能(非故意)遇到问题,例如Trying to open an already closed database
。
因此,我建议使用Singleton来创建数据库对象,这样每次调用database = getWritableDatabase();
时都会引用相同的对象。
考虑在onDestroy()方法中关闭它,以便在应用程序关闭数据库时也关闭它。
private static AllItemsDB db; //AllItemsDB is my database class
public static AllItemsDB getDb() {
if (db == null) {
Log.d("","Issue here");
db = new AllItemsDB(app);
Log.d("","Issue here not");
}
return db;
}
因为这是一个静态方法,我可以做AllItemsDB.myCRUD_methods,它每次都会返回相同的oblect并且也很容易访问。 :)