Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex/Air sqlite异步问题_Apache Flex_Actionscript 3_Sqlite_Air - Fatal编程技术网

Apache flex Flex/Air sqlite异步问题

Apache flex Flex/Air sqlite异步问题,apache-flex,actionscript-3,sqlite,air,Apache Flex,Actionscript 3,Sqlite,Air,我正在编写一个应用程序,将csv文件解析为数组,然后将数组插入sqlite数据库。我与sqlite数据库的异步连接有问题,我得到一个3106错误。。。。。。我认为问题在于它在前一条语句完成之前执行下一条语句,但我找不到处理这个问题的方法。任何帮助都将不胜感激 public function addData(categories:Array):void{ status = "Adding data to table"; var ins

我正在编写一个应用程序,将csv文件解析为数组,然后将数组插入sqlite数据库。我与sqlite数据库的异步连接有问题,我得到一个3106错误。。。。。。我认为问题在于它在前一条语句完成之前执行下一条语句,但我找不到处理这个问题的方法。任何帮助都将不胜感激

public function addData(categories:Array):void{
                status = "Adding data to table";
                var insrtStmt:SQLStatement = new SQLStatement();
                    insrtStmt.sqlConnection = conn;


                        for(var i:int=categories.length-1; i>=0; i--){
                            insrtStmt.text = "";
                            insrtStmt.text += "INSERT INTO masterlist ";
                            insrtStmt.text += "(mainid, transactionDate, tradeId, ccyPair, account, buySell, customer, date,"; 
                            insrtStmt.text += " additionalid, dealType, traderName, genericType, owner) ";
                            insrtStmt.text += "VALUES(@mainid, @transactionDate, @tradeId, @ccyPair, @account, @buySell, @customer, @date,";
                            insrtStmt.text += " @additionalid, @dealType, @traderName, @genericType, @owner);";
                            insrtStmt.parameters["@mainid"] = categories[i].mainid;
                            insrtStmt.parameters["@transactionDate"] = categories[i].transactionDate;
                            insrtStmt.parameters["@tradeId"] = categories[i].tradeId;
                            insrtStmt.parameters["@ccyPair"] = categories[i].ccyPair;
                            insrtStmt.parameters["@account"] = categories[i].account;
                            insrtStmt.parameters["@buySell"] = categories[i].buySell;
                            insrtStmt.parameters["@customer"] = categories[i].customer;
                            insrtStmt.parameters["@date"] = categories[i].date;
                            insrtStmt.parameters["@additionalid"] = categories[i].additionalid;
                            insrtStmt.parameters["@dealType"] = categories[i].dealType;
                            insrtStmt.parameters["@traderName"] = categories[i].traderName;
                            insrtStmt.parameters["@genericType"] = categories[i].genericType;
                            insrtStmt.parameters["@owner"] = categories[i].owner;
                            insrtStmt.execute();
                            }

                }

如果您认为问题在于它仍在执行,只需为它的“result”事件向语句添加一个事件侦听器,然后触发下一个语句

public function addDataSet( categories : Array ) : void {
    _categories = categories;
    _loopcounter = categories.length;
    _insrtStmt : SQLStatement = new SQLStatement();
    _insrtStmt.addEventListener( "result", addData );
    addData();
}

public function addData(event : Event = null) : void {
    _loopcounter--;
    // Set up rest of statement
    _insrtStmt.execute();
}

也许你应该使用同步连接而不是异步连接?如果需要,您可以打开同一数据库的多个连接,并使用适当的连接。

要同时执行多个命令,请使用事务

来自

\u updateStmt.sqlConnection=\u conn;
_updateStmt.text=“UPDATE main.myTable SET statusF=@STATUS,其中keyId=@ID”;
_康涅狄格州贝京//_conn是一个SQLConnection,我没有花时间为它编写代码,但这就是神奇之处
对于(变量i:uint=0;i

还可以查看adobe flex livedocs“提高数据库性能”一章

,或者您可以为每个查询创建一个新的SQLStatement,这样您就不需要等待,并且可以在客户端机器处理插入时尽快启动插入

public function addData(categories:Array):void {
    status = "Adding data to table";
    var insrtStmt:SQLStatement;

    for(var i:int=categories.length-1; i>=0; i--) {
        insrtStmt = new SQLStatement();
        insrtStmt.sqlConnection = conn;
        insrtStmt.text = "";
        insrtStmt.text += "INSERT INTO masterlist ";
        insrtStmt.text += "(mainid, transactionDate, tradeId, ccyPair, account, buySell, customer, date,"; 
        insrtStmt.text += " additionalid, dealType, traderName, genericType, owner) ";
        insrtStmt.text += "VALUES(@mainid, @transactionDate, @tradeId, @ccyPair, @account, @buySell, @customer, @date,";
        insrtStmt.text += " @additionalid, @dealType, @traderName, @genericType, @owner);";
        insrtStmt.parameters["@mainid"] = categories[i].mainid;
        insrtStmt.parameters["@transactionDate"] = categories[i].transactionDate;
        insrtStmt.parameters["@tradeId"] = categories[i].tradeId;
        insrtStmt.parameters["@ccyPair"] = categories[i].ccyPair;
        insrtStmt.parameters["@account"] = categories[i].account;
        insrtStmt.parameters["@buySell"] = categories[i].buySell;
        insrtStmt.parameters["@customer"] = categories[i].customer;
        insrtStmt.parameters["@date"] = categories[i].date;
        insrtStmt.parameters["@additionalid"] = categories[i].additionalid;
        insrtStmt.parameters["@dealType"] = categories[i].dealType;
        insrtStmt.parameters["@traderName"] = categories[i].traderName;
        insrtStmt.parameters["@genericType"] = categories[i].genericType;
        insrtStmt.parameters["@owner"] = categories[i].owner;
        insrtStmt.execute();
    }
}

您不应该使用这样的循环来等待事件。
public function addData(categories:Array):void {
    status = "Adding data to table";
    var insrtStmt:SQLStatement;

    for(var i:int=categories.length-1; i>=0; i--) {
        insrtStmt = new SQLStatement();
        insrtStmt.sqlConnection = conn;
        insrtStmt.text = "";
        insrtStmt.text += "INSERT INTO masterlist ";
        insrtStmt.text += "(mainid, transactionDate, tradeId, ccyPair, account, buySell, customer, date,"; 
        insrtStmt.text += " additionalid, dealType, traderName, genericType, owner) ";
        insrtStmt.text += "VALUES(@mainid, @transactionDate, @tradeId, @ccyPair, @account, @buySell, @customer, @date,";
        insrtStmt.text += " @additionalid, @dealType, @traderName, @genericType, @owner);";
        insrtStmt.parameters["@mainid"] = categories[i].mainid;
        insrtStmt.parameters["@transactionDate"] = categories[i].transactionDate;
        insrtStmt.parameters["@tradeId"] = categories[i].tradeId;
        insrtStmt.parameters["@ccyPair"] = categories[i].ccyPair;
        insrtStmt.parameters["@account"] = categories[i].account;
        insrtStmt.parameters["@buySell"] = categories[i].buySell;
        insrtStmt.parameters["@customer"] = categories[i].customer;
        insrtStmt.parameters["@date"] = categories[i].date;
        insrtStmt.parameters["@additionalid"] = categories[i].additionalid;
        insrtStmt.parameters["@dealType"] = categories[i].dealType;
        insrtStmt.parameters["@traderName"] = categories[i].traderName;
        insrtStmt.parameters["@genericType"] = categories[i].genericType;
        insrtStmt.parameters["@owner"] = categories[i].owner;
        insrtStmt.execute();
    }
}