防止多個線程又是讀取又是寫入
網上找到的方法:
對於這樣的問題,解決的辦法就是keep single sqlite connection,保持單個SqliteOpenHelper實例,同時對所有數據庫操作的方法添加synchronized關鍵字。
完美解決sqlite的 database locked 或者是 error 5: database locked 問題
意思就是對保存刪除或者此類數據庫操作的最上層的方法加鎖,這樣就能防止數據庫被同一時間不同地方調用了
然后單例模式也可以解決數據庫同時讀寫引起的錯誤;
比如使用如下DCL模式
public class XutilsHelper { private DbManager db; private static XutilsHelper sInstance = null ; public static XutilsHelper getInstance(){ if(sInstance == null){ synchronized (XutilsHelper.class){ if(sInstance == null ){ sInstance = new XutilsHelper(); } } } return sInstance; } private XutilsHelper(){}; //相關操作代碼省略 public .............. }
缺點是第一次加載時反映稍慢,但是能在絕大多數保證對象的唯一性;