Sqlite數(shù)據(jù)庫多線程并發(fā)問題

數(shù)據(jù)庫只有在事務(wù)中才能被修改。 所有更改數(shù)據(jù)庫的SQL命令(除SELECT以外的所有SQL命令)都會自動開啟一個新的事務(wù),并且當(dāng)最后一個查詢完成時自動提交。

threadsafe就是指在設(shè)置正確的前提下,多線程同時訪問SQLite并不會影響數(shù)據(jù)庫的完整性,而不是說每個線程對數(shù)據(jù)庫所有的操作都可以保證正確執(zhí)行?。?!經(jīng)過實(shí)際測試我才意識到這個問題。

不論是設(shè)置成SQLITE_CONFIG_SERIALIZED還是SQLITE_CONFIG_MULTITHREAD,多個線程(每個線程使用一個數(shù)據(jù)庫連接)執(zhí)行的時候,三個步驟(prepare_v2、step、finalize)都會出現(xiàn)SQLITE_BUSY(5)的錯誤。 雖然,不會影響數(shù)據(jù)庫中的數(shù)據(jù)完整性, 但是,一旦在程序中操作失敗,而我們又沒有檢查返回值,直接會影響程序邏輯的正確性(簡單說,本意為會插入的數(shù)據(jù)并沒有插進(jìn)數(shù)據(jù)庫)。 所以,顯然不可以直接讓多線程去操作數(shù)據(jù)庫。

解決方法:
1.在每個線程操作數(shù)據(jù)庫時,手動加鎖
2.形成一個操作隊(duì)列,統(tǒng)一去操作數(shù)據(jù)庫

摘自:
http://blog.csdn.net/wsmrcool/article/details/8287904

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • 一 . Sqlite多線程概述 SQLite 支持三種線程模式: 1. 單線程模式 這種模式下,沒有進(jìn)行互斥...
    OliviaZqy閱讀 13,772評論 3 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,798評論 11 349
  • “你還有沒有公德心咯,上次說過讓你別再發(fā)這些,今天又發(fā)。這是業(yè)主群不是你的那些個學(xué)習(xí)的東西,你臉皮怎么就這么厚呢?...
    杏花林閱讀 263評論 0 2

友情鏈接更多精彩內(nèi)容