Flex Mobile 4.6 Sqlite日期范围查询在Flex / Flash Builder内部或设备上不起作用

时间:2012-04-18 22:18:06

标签: flex mobile actionscript sqlite

我正在开发的应用程序允许用户创建特定日期的日志。我试图根据某个日期范围撤回信息。

这是创建表格的代码(为了这篇文章的目的而缩减):

CREATE TABLE IF NOT EXISTS TimeLogged(
    ...
    LogDate DATE NOT NULL
);

用于将日期插入表中的代码是:

INSERT INTO TimeLogged (LogDate) VALUES (date('2012-01-14'));

以下是我用来获取日期范围的查询:

SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN date('2012-01-01') AND date('2012-04-16')

它在Sqlite命令窗口中运行良好。这是一个链接,因为我太新了,不能发布pix: Sqlite Command Window

以下是我在Flex / Flash Builder 4.6中使用的代码,以获取结果:

            var stmt:SQLStatement = new SQLStatement();
            stmt.sqlConnection = SQLCom.SQLCon;
            stmt.text = "SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN date('2012-01-01') AND date('2012-04-16')";
            try{
                stmt.execute();
            }
            catch(err:SQLError){
                trace(err.details);
            }

            var a:ArrayCollection = new ArrayCollection(stmt.getResult().data);

            trace("a.length: " + a.length);

            for(var i:int = 0; i < a.length; ++i)
                trace("a[" + i + "]: " + a[i].LogDate);

即使有多条记录,我也没有得到任何结果。

当我删除WHERE / BETWEEN语句时,这是我在Console输出中得到的内容: Flex/Flash Builder Console output

提前感谢任何可以解决我的问题的人。

1 个答案:

答案 0 :(得分:1)

我找到了有用的东西。我创建了一个将UTC日转换为朱利安日的函数:

protected function UTCToJulianDay(d:Date):Number {
    return ((( d.time - (d.getTimezoneOffset() * 60000))  / 86400000) + 2440587.5);
}

然后我通过函数运行每个日期对象:

var d:Date = new Date();
d.setTime(d.getTime() - (86400000 * 7));// first day is one week prior

var d1:Number = UTCToJulianDay(d);
var d2:Number = UTCToJulianDay(new Date());

所以date对象只是按如下方式进入查询(参考原始帖子获取完整代码):

stmt.text = "SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN " + d1 + " AND " + d2;