0

我的数据库以异步模式打开,这是我尝试通过提交在其中插入一些信息的部分,在执行此工作时没有发生任何其他事情。

conn.addEventListener(SQLEvent.COMMIT, commitHandler);
conn.begin();
for (var i:int = 0; i < someData.length; i++)
{
saveStmt = new SQLStatement();
saveStmt.sqlConnection = conn;
saveStmt.text = sql;
saveStmt.parameters["@some_ID"] = someData[i].id;
saveStmt.parameters["@some_title"] = someData[i].title;
saveStmt.execute();
}
conn.commit();
//here is commit handler
private function commitHandler(e:SQLEvent):void 
{
saveStmt = null;
conn.removeEventListener(SQLEvent.COMMIT, commitHandler);
conn.close(); //this gives error: Database file is currently locked
}

我在 conn.close() 上遇到错误;,无法完成,因为“数据库文件当前被锁定”

来自 Adob​​e 的帮助:SQLEvent.COMMIT 常量定义了提交事件对象的 type 属性的值。当 SQLConnection.commit() 方法调用成功完成时,将调度此类事件。

系统可能有什么问题?奇怪的是这个错误不是永久性的,它有时会出现(在其他情况下一切都没有问题并且数据库正在成功关闭),我用conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); ,没有出现其他类型的错误,仅在上面描述。

上面的错误发生在 Flash Pro 的模拟器和设备上(在 Nexus 7 平板电脑上没有问题,在三星 Galaxy s3 上没有问题),我正在使用适用于 Android 的 Adob​​e Air 3.8,3.7 和 3.6 也会发生同样的情况。

4

1 回答 1

0

我认为这可能与交易的规模有关。我试图重现这一点,诚然使用有限的数据集,但没有问题。

我建议用 a或 a延迟SQLConnection.close()通话。callLater()Timer

还要检查 的值,SQLConnection.inTransaction这些值SQLStatement.executing可能表明锁仍然处于活动状态。

于 2013-09-20T08:54:17.187 回答