2012-09-14 50 views
7

我看到我的讀取被寫入WAL模式的數據庫所阻塞 - 我很難理解爲什麼。SQLite數據庫(與WAL)在準備「選擇」的時候鎖定 - 爲什麼?

我的設置:

  • sqlite3的數據庫,journal_mode = WAL,同步= NORMAL
  • 多張C++的工序(3是精確的)使用的數據庫 - 開放這些過程中的任何方法和關閉自己的非與sqlite3_open_v2共享連接。
  • 方法,這些方法將數據SQLITE_OPEN_READWRITE模式下打開數據庫
  • 中的方法從數據庫中讀取(即只執行Select語句)在SQLITE_OPEN_READONLY模式

在WAL模式打開數據庫,我相信它應該是在發生寫入時可能有併發讀取器。

但我看到「數據庫已鎖定」當我準備用sqlite3_prepare_v2

什麼可能我是做錯了,這是造成讀者被阻塞的select語句?我誤解了「閱讀」究竟是什麼?

任何提示讚賞,

謝謝:)

回答

0

檢查你是否每次sqlite3_step後sqlite3_reset,因爲這是導致數據庫被鎖定錯誤一例。 在用sqlite3_prepare編寫語句並用sqlite3_step執行語句之後,您需要始終使用sqlite3_reset重置它。

sqlite3_reset(S)接口將準備好的語句S重置爲其程序的開頭 。

希望這可以解決您的問題... !!!

相關問題