2014-12-03 148 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上运行。我的假设是,数据库被加载到内存中(因此也需要保存回磁盘)是错误的!道歉消耗的带宽!