我正在运行如下所示的查询:
ATTACH 'db2' as db;
BEGIN TRANSACTION;
...
END TRANSACTION;我必须这样做,因为在事务中附加是错误的。
当发出上述查询时,如果另一个连接已经在运行任何类型的查询,就会出现问题。则整个查询似乎失败,返回SQLITE_BUSY。
为了处理这个问题,我休眠了一段时间,然后重试事务。但是,现在我收到错误消息“无法在事务内附加数据库”。为什么会发生这种情况?在返回SQLITE_BUSY的情况下,原始附加是否成功?如果是这样,那么为什么我没有得到“数据库db2已经在使用中”?或者,尽管返回了SQLITE_BUSY,但上一个事务仍然打开吗?这对我来说没有任何意义,查询繁忙失败,所以事务不应该被打开。但它还能是什么呢?
通常,执行查询的程序不知道查询是什么,它只是一个包装器。因此,我不能将查询分成两部分,一部分用于附加数据库,另一部分用于执行查询的其余部分。但我不确定这是不是问题所在。
发布于 2012-06-13 04:37:34
我还没有弄清楚发生这种情况的确切原因,但我发现一个令人满意的解决方案是在返回SQLITE_BUSY之后调用sqlite3_close(),然后调用sqlite3_open()。这消除了重试之前的查询可能会遇到的任何未完成的条件。
https://stackoverflow.com/questions/11003465
复制相似问题