2012-10-28 25 views
3

我想打開並讀取SQLite .db文件,只讀。我保證在這段時間內沒有人會碰它(也許,除了只讀)。SQLite - make true只讀數據庫

我需要從SQLite3作爲回報,它不會向磁盤寫入任何數據(特別是 - 沒有描述那些描述的here),並且不在文件上使用任何文件系統鎖。

這是不是太難問了?

+0

我們發現這個「Read-Uncommitted Isolation Mode」,請參閱http://www.sqlite.org/sharedcache.html,它應該解決這個問題;但是,它沒有。 SQLite仍然嘗試使用鎖定API。任何想法? –

回答

0

可以使用只讀用戶嗎?我不知道SQL Lite中是否存在這樣的角色。

+1

SQLite沒有用戶或訪問權限。 –

3

如果您在某些Unix下運行,則可以使用unix-none VFS來禁用所有鎖定。

在Windows中,SQLite總是使用鎖。 如果您確實想要避免鎖定,您可以編寫自己的VFS,或使用xSetSystemCall覆蓋鎖定系統調用。

如果SQLite需要一個臨時文件,你不能阻止它創建一個。 但是,您可以將其配置爲create them in memory instead of on disk

+1

注意:關於您自己的VMS,您可以使用'sqlite_vfs_ *'API獲取現有的VMS,並且只使用您自己的鎖定功能創建一個新的'vtable',它不會執行任何操作。所以這應該很簡單。 – Artyom

+0

你的意思是VFS嗎?)) –

+0

是的vfs,確實是':-)' – Artyom

0

VFS沒有Lock方法可以注入。因此沒有直接的方法來注入虛擬LockFile和LockFileEx方法。

這些方法在sqlite3_io_methods(winIoMethod)中被引用,並且在運行時似乎不容易修改而不改變SQLite源代碼。

那麼,如果我理解正確,VFS不是正確的方向?或者是?