我在应用程序中多次使用openAsync()函数以成功打开SQLite连接。但最近我补充说,还使用openAsync()更多的代码,现在我得到这个错误:如何在大型Flex应用程序中管理许多openAsync()调用?
Error: Error #3110: Operation cannot be performed while SQLStatement.executing is true.
at Error$/throwError()
at flash.data::SQLStatement/checkReady()
at flash.data::SQLStatement/execute()
at Function/com.lang.SQL:SQLErrorStack/deleteAllRecordsFromErrorStackTable/com.lang.SQL:connOpenHandler()[C:\work\Lang\trunk\actionscript\src\com\lang\SQL\SQLErrorStack.as:466]
它看起来像前面的代码,而另一个已经开始没有执行完毕。 我的问题是:为什么第二个连接中的代码执行被拒绝?我期望使用某种队列机制,但事实并非如此。我到处寻找解决方案来解决这个问题,但我失败了。你能帮我吗?
一个能打开DB连接的问题能解决吗?我应该怎样修改我的代码?
这是类似于此的代码,在我的应用程序中出现了几次。
var SQLquery:String;
SQLquery = "DELETE FROM ErrorStackTable";
var sqlConn:SQLConnection = new SQLConnection();
sqlConn.addEventListener(SQLEvent.OPEN, connOpenHandler);
var dbFile:File = new File();
dbFile.nativePath = FlexGlobals.topLevelApplication.databaseFullPath_conf+"\\"+FlexGlobals.topLevelApplication.databaseName_conf;
sqlConn.openAsync(dbFile); // openDB
sqlSelect = new SQLStatement();
sqlSelect.sqlConnection = sqlConn;
sqlSelect.text = SQLquery;
function connOpenHandler(event:SQLEvent):void
{
sqlSelect.addEventListener(SQLEvent.RESULT, resultSQLHandler);
sqlSelect.addEventListener(SQLErrorEvent.ERROR, errorHandler);
sqlSelect.execute();
}
你不能坚持到连接?在几乎所有数据库平台中,确保连接是一个耗时的过程。 –
我可以接受这种耗时的过程作为解决方案,只要它工作。如果你看看代码,你会注意到我将不得不重构我的代码。是不是真的值得吗?我没有很多数据库连接,但它们非常连续。 – chrisiek
在结果或错误处理程序触发后,是否调用以优先执行下一个查询? –