我正在开发 android 应用程序,我经常在其中使用访问本地数据库。这个数据库可以从不同的therads访问,所以我有一个数据库的协调问题。我使用以下 open()
和 close()
方法。
public void open(){
mDb=mDbHelper.getWritableDatabase();
}
public void close(){
mDb.close();
}
所以,通常,当我需要访问数据库进行某些操作时,我会打开数据库,然后执行一些操作,最后关闭数据库。我通常用于此目的的代码如下:
try {
dbManager.open();
// database operation
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
dbManager.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是,如果这段代码被用于不同的线程(假设线程A和线程B),可能会出现以下情况:
A thread: performs open()
B thread: perfroms open()
A thread: perfroms some operation
A thread: performs close()
B thread: try to perform some operation but it fails!
因此,我猜想唯一的解决方案是在我的应用程序启动时执行 open()
并在我的应用程序停止时执行 close()
。我不确定这是否是一个好的解决方案?
实际上,getWritableDatabase()
方法(从我的 open()
调用)的文档说:
Make sure to call close() when you no longer need the database
那么,有人可以向我推荐替代解决方案吗?
最佳答案
您可以使用单例实例,通常您可以不关闭数据库(但保持事务关闭)。有一些信息:
关于Android:打开和关闭 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16171512/