2012-09-28 36 views
2

我使用的sqlite3在iOS應用程序,我已經遇到了一個很奇怪的問題多 倍。sqlite的未封閉的讀事務

我使用WAL和我所有的寫操作發生在一個管理線程,只允許1次操作的時間和我的讀取使用不同的數據庫處理和一切工作正常。我看到的問題有時候我的讀取句柄進入這個奇怪的狀態,它不會讀取提交的數據。這就像有一個未提交讀事務...

我可以成功地寫入到數據庫和我出口我的結果我的電腦,我看到新寫入的結果就好了。但是,我的閱讀似乎在較早的時間點訪問數據庫......就像他們被卡住了一樣。如果我關閉應用程序並重新打開它們,它們就沒事了,它們會讀取新提交的數據,但我想知道我的應用程序在這種狀態下是如何被卡住的。

任何幫助將不勝感激。提前致謝。

+0

其他寫入事務是否在此狀態下成功? –

+0

是的。我寫的使用不同的數據庫句柄,如果我寫,然後導出數據庫,我看到他們成功通過。 – VTS12

+0

奇怪的是新數據沒有被讀取......我的讀取仍然訪問舊數據。 – VTS12

回答

1

我遇到了完全一樣的問題,但在Debian萊尼(內核2.6.33)W/sqlite3的3.7.7.1。

原來,我得到了一些流程上掛着一些陳舊DB文件描述符之後我刪除並重新創建一個數據庫文件。

我通過確保所使用的數據庫中的所有進程再次重新創建數據庫之前被打死固定它。

通過擺脫舊的進程,文件句柄也被刪除。