如何等到sqlite3解锁数据库?

时间:2014-12-03 20:59:32

标签: multithreading shell sqlite

我正在使用一个单行脚本调用sqlite3 shell来更新数据库中的值(这是在Windows 8.1上,虽然这在这里无关紧要。)

该脚本只读:

sqlite3 < update.sql

update.sql文件包含:

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

即。它打开数据库(根据sqlite3-help意味着:将其读入内存),应用更新,然后再次将修改后的数据库保存回磁盘。

但是当我执行那个脚本时,我得到了:

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

原因 - 正如我通过谷歌搜索所发现的那样 - 似乎是UPDATE在后台线程中运行,这会使数据库锁定。这意味着,当save-command尝试将数据库写回磁盘时,数据库仍处于锁定状态。

我在sqlite3-shell中找不到释放该锁的命令(或等到该锁释放后)。那么,我该怎样做才能释放该锁(或等到它被释放),从而让这个脚本正常工作?

缺少这样的命令,因此在应用一些修改后无法保存数据库似乎使sqlite3 shell对我来说完全没用。我必须在这里遗漏一些基本的东西!?!

1 个答案:

答案 0 :(得分:0)

我刚刚意识到:我不需要写回数据库,更新已直接在数据库上运行。我的假设是,DB被加载到内存中(因此也需要保存回磁盘)是错误的!为消耗的带宽道歉!