我正在开发一款Android应用程序,其中经常需要访问本地数据库。由于该数据库可能会被不同的线程访问,因此我在处理数据库时遇到了协调问题。我使用以下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
那么,有人能给我提供一种替代方案吗?