0

我有一个带有 SQLite 数据库的移动应用程序来在手机上存储详细信息,我想通过 PHP 将此表的内容同步到远程 mySQL 服务器。

我使用以下内容将行写入远程服务器。

protected function button_clickHandler(event:MouseEvent):void
        {
            var result:SQLResult;
            var numRows:int ;
            conn = new SQLConnection();
            conn.open(file, SQLMode.CREATE);
            selectStmt.sqlConnection = conn; 
            var sql:String =  "SELECT * FROM surveyResponseHeader"; 
            selectStmt.text = sql; 
            selectStmt.execute(); 
            result = selectStmt.getResult(); 
            numRows = result.data.length; 
            trace (result.data.length);
            trace (numRows);
            for (var i:int = 0; i< numRows; i++){

                surveyresponse.surveyID = parseInt(result.data[i]["surveyID"]);
                surveyresponse.surveySite =result.data[i]["surveySite"];
                surveyresponse.surveyReference = result.data[i]["surveyReference"];
                surveyresponse.siteManager =result.data[i]["siteManager"];
                surveyresponse.surveyDate = result.data[i]["surveyDate"];
                surveyresponse.surveyNextVisit = result.data[i]["surveyNextVisit"];
                surveyresponse.surveySignature = result.data[i]["surveySignature"];
                surveyresponse.surveyImage =result.data[i]["surveyImage"];
                surveyresponseheaderService.createSurveyresponseheader(surveyresponse);

            }

        }

我的问题:

在第一次运行时只发布最后一行,并且根据 SQLLite 查询返回的行数多次发布,在第二次运行时它正确发布,这是为什么呢?

我已经盯着这个看了好几个小时,看不出我哪里出错了。

任何建议表示赞赏。

4

2 回答 2

0

您希望对其进行排序,但不包含 ORDER BY 语句。
默认情况下,SQL 将按主键排序。

要对除该键之外的其他内容进行排序,您需要使用 ORDER BY 表达式指定它。一个 ORDER BY 表达式可以可选地后跟关键字 ASC(首先返回较小的值)或 DESC(首先返回较大的值)之一。如果既未指定 ASC 也未指定 DESC,则默认情况下按升序(较小的值在前)对行进行排序。

于 2012-10-17T13:31:45.747 回答
0

我建议你添加事件监听器:

dbStatement.addEventListener(SQLEvent.RESULT, resultHandler);
dbStatement.addEventListener(SQLErrorEvent.ERROR, errorHandler);
dbStatement.execute();

然后在处理程序检查结果中:

function resultHandler(event:SQLEvent):void
{
    var result:SQLResult = dbStatement.getResult();
    if (result != null)
    {
        var numRows:int = result.data.length;
        for (var i:int = 0; i < numRows; i++)
        {
            var row:Object = result.data[i];
            trace("id:", row.id, ", name:", row.name, ", ssn:", row.ssn);
        }
    }
}

function errorHandler(event:SQLErrorEvent):void
{
    trace("An error occured while executing the statement.");
}

execute() 方法的帮助中所述

于 2012-10-17T14:39:50.293 回答