我开发了一个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
谁能告诉我一个可执行的解决方案?