2014-12-03 48 views
0

我正在使用調用sqlite3 shell來更新數據庫中的值的單行腳本(這是在Windows 8.1上,雖然在這裏應該沒有關係)。如何等待sqlite3解鎖數據庫?

腳本只是讀取:

sqlite3 < update.sql 

的update.sql文件包含:

.open "mydb.db" 
UPDATE <args omitted for brevity>; 
.save "mydb.db" 
.exit 

即它打開DB(根據sqlite3的,幫助這意味着:它讀取到內存)應用更新,然後想要將修改的DB再次保存回磁盤。

但是,當我執行該腳本,我得到:

C:\>sqlite3 0<update.sql 
.open "mydb.db" 
UPDATE <args omitted for brevity>; 
.save "mydb.db" 
**Error: database is locked** 
.exit 

的原因 - 因爲我發現通過谷歌搜索左右 - 似乎是,更新是在後臺線程,這使數據庫鎖定運行。這意味着,當save-command嘗試將數據庫寫回到磁盤時,數據庫仍處於鎖定狀態。

我發現沒有命令在sqlite3-shell釋放該鎖(或等到該鎖被釋放)。那麼,我可以做些什麼來釋放這個鎖(或等到它被釋放),從而讓這個腳本正常工作?

缺少這樣的命令,因此無法在應用一些修改後保存數據庫似乎使sqlite3 shell完全無用。我一定在這裏錯過了一些基本的東西!?!

回答

0

我剛剛意識到:我不需要寫回DB,更新已經直接在DB上運行。我的假設是,數據庫被加載到內存中(因此也需要保存回磁盤)是錯誤的!道歉消耗的帶寬!