2014-02-09 56 views
3

我看到類似的問題已多次報告。在我的情況下,我直接使用我自己的JNI庫(不是Android Java層)調用的「C」API和最新的合併3.8.3。所以我控制着我正在處理的事情。 然後,在某些操作(更新)我收到一個錯誤,指出它無法打開數據庫文件。我沒有得到與INSERT語句,只有更新。 當我啓動SQLite的錯誤回調,我看到以下內容:SQLite&Android:無法打開數據庫文件 - 錯誤14

可以在[6c643e45c2] os_unix.c 29299線無法打開文件:29299:(13) 開放(./ etilqs_1zMsiYdpXhd3JqY) - 報告中止在36:[更新 .....]

挖掘這一點,它似乎與日記文件有關。當我使用編譯指令將journal_mode設置爲MEMORY時,問題就消失了。但所有其他模式,如WAL或TRUNCATED導致相同的錯誤。

從eclipse調試代碼時,我可以看到執行INSERT時創建的-journal文件。然後在交易完成時被刪除。所以它告訴我它在目錄上有足夠的權限(/ data/data //)

請注意,完全相同的代碼在Windows上完美工作(C & Java),我沒有收到錯誤。 Android和文件訪問權限正在確定。

我有一種方法來獲得系統地重現錯誤。如果某人對我應該檢查的內容有一些想法,那麼我會很樂意運行一些實驗並報告結果。

+0

這是一個臨時文件。你是如何配置SQLite庫副本的臨時路徑的? –

+0

我沒有做任何配置。在執行INSERT時,我看到日誌文件是在與DB相同的目錄中創建的。但是執行UPDATE時會失敗。 –

+0

這不是日記文件。這是一個臨時文件。當前目錄('。/')不一定是數據庫文件的目錄。 –

回答

2

太晚了答案..

我看到了同樣的問題,使用多線程時。

在您的第一個查詢中發送下一個語句查詢。

PRAGMA temp_store_directory = '一些寫路徑'

SQLITE3文件說 「過時」,但..這對我的作品..

是真的過時?

祝你好運..

ps。我的sqlite3版本是[sqlite-amalgamation-3100200]

+0

這是正確的,只要看看與'etilqs'相關的源代碼,sqlite會將其臨時文件存儲到'/ tmp' ,'/ usr/tmp',但Android沒有那個文件夾。使用這個棄用的API似乎是唯一的答案。 (sqlite可能會使用很多方法來使用臨時目錄,所以只需將它放在'onConfigure'方法中,這應該可以解決很多問題)。 –

+0

這對我有用。實際上,我將臨時路徑設置爲數據庫的父目錄,並且工作正常。我會向SQLite團隊提交問題。 –

相關問題