我正在開發和android應用程序,我經常使用它訪問本地數據庫。這個數據庫可以從不同的therads訪問,所以我對數據庫有一個協調問題。我使用以下open()
和close()
方法。Android:打開和關閉SQLite數據庫
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();
}
}
但是,如果此片的代碼是從differnts線程使用(假設線程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
所以,任何人都可以提出我的替代解決方案?
不關閉數據庫,僅僅只是接近光標到數據 – umesh 2013-04-23 14:10:14
同步訪問或在一個線程中只有 – 2013-04-23 14:15:36
做分貝OPS ...或建立的ContentProvider ... – Selvin 2013-04-23 14:16:31