[英]Reading from a locked SQLite3 database
我正在查看第三方進程擁有的SQLite數據庫。 它似乎已鎖定並具有* -journal文件。 我不知道的是,鎖是共享還是獨占。
我希望從數據庫中讀取,即使它當前被其他進程鎖定。 我只會讀數據庫。
目前我失敗了。 只要第三方進程正在運行,我就會得到一個SQLITE_BUSY返回碼。
我看過sqlite3_busy_handler,但這似乎不是解決方案。 據我所知,只允許實現重試機制。 它似乎沒有提供一種方法來忽略數據庫被鎖定的事實。
如何強制SQLite從該數據庫中讀取?
順便說一句,我目前正在使用FMDatabase API包裝器。 這不使用sqlite3_busy_handler。 只要它獲得SQLITE_BUSY返回代碼,它就會無休止地循環。
我一直在對此進行一些研究,看起來有一些(非常不受歡迎的)選項。
這對你來說可能不是一個選擇,也不適合我。
這似乎是解決這個問題的最佳方案。 在我的情況下,我正在嘗試閱讀Firefox sqlite數據庫。 Firefox似乎長時間鎖定文件,所以我不能等待。
因為您正在復制實時數據庫文件,所以可能會損壞副本。 我不認為有破壞原件的風險(但我不確定)。
只需將文件復制到shell上即可
copy original.sqlite copy.sqlite
要么
cp original.sqlite copy.sqlite
然后正常打開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.