如何使用 UCanAccess 库在日期范围内进行过滤

问题描述 投票:0回答:1

尝试查询某个日期范围内的记录,执行查询时,Java 控制台会抛出“UCAExc:::4.0.4 未知令牌:” 它不显示令牌

通过反复试验,我发现错误在于库理解查询的日期范围之间,

String sql = reportMaster.getQuery();
           Statement statement = connection.createStatement();
           ResultSet result = statement.executeQuery(sql);

当直接在 Microsoft Access 中执行时,这已经可以工作并且应该生成 3 个字段,而不是在 java 控制台中抛出未知令牌错误 编辑:

我分块测试了原始查询(如下),看看是否存在语法错误,记录可以按状态和单个日期过滤,但不接受日期范围

SQL语句是:

SELECT ID from event
WHERE status = 'Offline' AND (event_date >= #01/09/2017# AND event_date <= #21/04/2018#)
java ms-access jdbc ucanaccess
1个回答
0
投票

我在 Access 数据库中遇到了类似的问题,该数据库有一个日期/时间列,我需要在其中选择一个范围。 以下是一些最终起作用的片段。 我意识到这是一个 5 年前的问题,但是当我得到

UCAExc:::4.0.4 unknown token:
时,我发现自己遇到了与 OP 类似的日期格式问题。

int minutesSpan = 1;
String[] sqlSpan = getSqlSpanValues(minutesSpan);
String query = "select * from " + recordsTableName + " where (STARTTIME >= " + sqlSpan[0] + " and STARTTIME <= " + sqlSpan[1] +")";
.
.
.
private static final SimpleDateFormat DFSQL = new SimpleDateFormat("#yyyy-MM-dd HH:mm:ss#");
public String[] getSqlSpanValues(int minutes) {
    int seconds = minutes * 60 / 2;
    String[] earlyLateArray = new String[2];
    Calendar early = (Calendar) start.clone(); early.add(Calendar.SECOND, -seconds);
    Calendar late = (Calendar) start.clone(); late.add(Calendar.SECOND, seconds);
    earlyLateArray[0] = DFSQL.format(early.getTime());
    earlyLateArray[1] = DFSQL.format(late.getTime());
    return earlyLateArray;
}
© www.soinside.com 2019 - 2024. All rights reserved.