execution()什么时候在sqlite中为flex返回false?

时间:2009-09-07 22:08:58

标签: flex sqlite air

我读过flex语言参考: http://livedocs.adobe.com/flex/3/langref/flash/data/SQLStatement.html#executing

  

如果调用了execute()并且没有从数据库返回所有结果,则此属性为true。

但是,我无法理解这意味着什么。我一直收到错误:

  

错误#3106:当SQLStatement.executing为true时,无法更改属性。

我已经尝试为SQLEvent.RESULT创建一个事件处理程序,我的想法就是如何从数据库返回结果,因此execution()将返回false - 不起作用。

这是否意味着我试图更快地更改我的SQLStatement变量? execute()函数需要多长时间?

有问题的代码:

private function fileProgress(p_evt:ProgressEvent):void {
            var char:String;
            var line:String = "";
            var counter:int = 1;

            sqlStatement = new SQLStatement();
            sqlStatement.sqlConnection = dbConn;
            while(stream.position < stream.bytesAvailable) 
            {
                char = stream.readMultiByte(1, File.systemCharset);
                if(char == "\n")
                {
                    sqlStatement.text = "INSERT INTO stats VALUES ('" + counter + "','" + line + "');";
                    sqlStatement.execute();
                    counter++;
                    line = "";
                }
                else
                {
                    line += char;
                }
                readProgress.text = ((p_evt.bytesLoaded/1048576).toFixed(2)) + "MB out of " + ((p_evt.bytesTotal/1048576).toFixed(2)) + "MB read";
            }

            if(line != "")
            {
                sqlStatement.text = "INSERT INTO stats VALUES ('" + line + "');";
                sqlStatement.execute();
            }

        }

stream是一个文件流
我正在尝试读取文本文件并将每行放入一个新的sqlite表行。
我也尝试使用sqlStatement.parameters作为我的插入查询的替代方法,但没有运气。这引发了一个不同的错误:

  

错误#3110:SQLStatement.executing为true时无法执行操作。

4 个答案:

答案 0 :(得分:1)

最好为每个查询创建一个新的SQLStatment,而不是重用SqlStatement 它也应该在OpenAsyn模式下工作。

var statement:SQLStatement; 
for(..) //LOOP
{
            statement =new SQLStatement();
            statement.sqlConnection = dbConn;
            statement.text="QUERY HERE";
            statement.execute();
}

答案 1 :(得分:0)

尝试cancel()

答案 2 :(得分:0)

如果有人来这里看,我想我会发布我的解决方案。

只需将SQL连接从connection.openAsync()更改为connection.open()

即可

这为我摆脱了错误

答案 3 :(得分:0)

调用execute()或execute(-1)时 - &gt; execution()立即返回false(如果处于同步模式)或者在SQLResult事件触发后(如果处于异步模式)。

使用prefetch&gt;调用execute()时0 execution()仅在返回整个结果集时返回false。例如,execute(10)将返回最多10行。如果execution()为true表示有更多数据,则需要调用next()来获取接下来的10行。继续调用Next()直到执行()为false。你可以随时调用cancel()来提前退出(就像你只想要前10行一样。)