簡體   English   中英

從鎖定的SQLite3數據庫中讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM