SQL Lite查询(在日期之间)不起作用

时间:2017-01-01 07:25:47

标签: java sql sqlite

在我的小测试程序中,我有一些SQL查询。第一个SELECT * FROM kilometer;正常工作并返回表中的所有列。所以在Java嵌入式中,ResultSet rs = stmt.executeQuery("SELECT * FROM kilometer;");返回一个非空的ResultSet。

现在我想只获取特定日期内的行。但是我的嵌入式查询ResultSet rs = stmt.executeQuery("SELECT * FROM kilometer WHERE datum BETWEEN '2016-01-01' AND '2016-12-31';");返回一个空的ResultSet。但是我已经测试了它online并且它运行正常。我的错误在哪里?我已经查询了一些像this这样的网页,但我找不到错误。

我正在使用SQLite 3.15.1和Java SE 8.

完整的java代码:

public ArrayList<Strecke> getErgebnisse(final String startzeitpunkt, final String zielzeitpunkt) {
ArrayList<Strecke> strecken = new ArrayList<>();
try {
    try {
        if (connection != null) {
        }
        connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
        if (!connection.isClosed())
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM kilometer WHERE datum BETWEEN '2016-01-01' AND '2016-12-31';");
    while (rs.next()) {
        strecken.add(new Strecke(Instant.ofEpochMilli(rs.getDate("datum").getTime()).atZone(ZoneId.systemDefault()).toLocalDate(), rs.getString("startort"), rs.getString("zielort"), rs.getDouble("kilometer")));
    }
    rs.close();
    connection.close();
} catch (SQLException e) {
    e.printStackTrace();
    }
    return strecken;
}

1 个答案:

答案 0 :(得分:0)

首先,我建议您在执行查询时使用预准备语句,而不是直接将查询作为字符串传递......其次我认为这里的问题是您将日期作为字符串传递给报价而不是约会.....我认为这是问题所在。你需要使用sqllites日期时间函数....