2013-12-23 64 views
1


我認爲這是非常簡單的問題。但我自己無法解決。
我有兩個應用程序。 以極快的速度寫入sqlite3數據庫 - 每秒大約6個事務塊。 另一個應該有時從數據庫讀取數據。
我應該如何設計這兩個應用程序?現在,當第一個應用程序寫入另一個失敗時,出現錯誤「數據庫已鎖定」,或者我試圖執行的funcs:SQLite3_Open或帶有SQLITE_OPEN_READONLY標誌的SQLite3_Open_v2。
主要問題是:是一個應用程序能夠做'SELECT',而另一個應用程序則是'INSERT'
如果不行,我該怎麼辦?
關閉寫入數據庫連接,然後打開另一個數據庫連接,做select,然後關閉它,然後再打開寫回連接並繼續插入?換句話說我是否需要「發明」一些機制來控制這些「讀取」和「寫入」應用程序對separte數據庫的訪問?
如果是,比應用「A」強制關閉應用的「B」連接的可能性更大 謝謝!SQLite多進程訪問

+0

此鏈接可能會幫助您:http://stackoverflow.com/questions/1680249/how-to-use-sqlite-in-a-multi-threaded-application – Anuraj

回答

2

SQLite可以很好地處理多個進程。藉助WAL支持,您甚至可以在另一個連接寫入時從一個連接讀取數據庫。假設每個事務每次不超過166ms,那麼每秒6次事務並不是很多。

當您逐句通過語句時,而不是在打開數據庫時,通常會返回鎖定。第一次連接是否可以用SQLITE_OPEN_EXCLUSIVE打開?這會導致另一個進程無法打開連接。如果是這種情況,請刪除該標誌。

+0

塞繆爾,謝謝你的回答!
Alex