我的Windows應用程序(用C語言編寫)使用SQLite(使用嵌入式聯軍源),用於存儲離線數據,並曾與它沒有任何問題,在一個多字節字符設置構建。我現在將代碼庫轉換爲Unicode。 SQLite非常高興地使用Unicode編譯運行,以UTF-16LE編碼創建SQLite數據庫。SQLite數據庫不會關閉在Unicode時和附註journal_mode設置
我遇到一個很奇怪的事情,雖然。如果我運行查詢PRAGMA journal_mode = DELETE
(實際上,將其設置爲任何允許的值,包括OFF
,做同樣的事情),一切都正常運行,直到代碼關閉數據庫,此時調用sqlite3_close()
回報SQLITE_BUSY
,與錯誤"unable to close due to unfinalised statements"
。
發生這種情況,即使我在數據庫上運行的唯一的查詢是單一的編譯命令!我可以運行其他編譯好的代碼(例如"PRAGMA synchronous = NORMAL"
)和我所有的SQL查詢,並且數據庫將相當愉快地關閉;只是這個journal_mode
編譯指示導致了這種奇怪的行爲,並且僅在代碼的Unicode編譯中 - 多字節編譯不顯示此問題。無論數據庫是否已經[在UTF-16LE模式]中存在,或者是否在首次打開時創建它,都會發生這種情況。
任何想法可能是錯的?我正在使用SQLite build v3.7.11。
一個注意:從技術上講,編譯調用不是我跑的唯一查詢:我也跑了呼叫'PRAGMA quick_check(1)'當我第一次打開/創建數據庫。 – 2012-04-10 10:07:41
稍有混淆,'journal_mode'似乎沒有'NORMAL'作爲其允許值之一 – Hasturkun 2012-04-10 10:44:51
哎呀,我的意思是「刪除」 - 即默認值。我將編輯該問題。 – 2012-04-10 12:40:43