Java和Access-使用预处理语句并获取日期

时间:2019-02-18 11:32:00

标签: java date ms-access ucanaccess

我正在使用MS Access 2007数据库执行JavaAFX应用程序。我需要通过在日期之后进行过滤来从数据库中提取数据。

这项工作很好:

ResultSet rs = stat.executeQuery("SELECT * FROM Notification WHERE 
postDate>=#2018-01-18# AND getDate<=#2019-02-18#");

但这不是:

private final static String GET_ALL = 
    "SELECT * FROM Notification WHERE postDate>=? AND getDate<=?";

public ArrayList<Notification> getAllNotification(LocalDate postDate, LocalDate getDate) {

    PreparedStatement prepStmt = conn.prepareStatement(GET_ALL);       
    prepStmt.setDate(1, java.sql.Date.valueOf(postDate));
    prepStmt.setDate(2, java.sql.Date.valueOf(getDate));

    ResultSet rs = prepStmt.executeQuery();
}

我做错了或没有做的事情。 我当然使用的是版本4.0.3中的ucanaccess库。有什么建议或提示吗?

1 个答案:

答案 0 :(得分:0)

在MS Access中,日期“#”用作标识符。您将必须在每个日期的开始和结束时明确指定#。您可以尝试一下,它应该可以工作。

"SELECT * FROM Notification WHERE postDate>= #?# AND getDate<= #?#";

为此,我将使用以下语法。

private String GET_ALL = "";

public ArrayList<Notification> getAllNotification(LocalDate postDate, LocalDate getDate) {

    GET_ALL = "Select * FROM Notification WHERE postDate >= #" + postDate + "# AND getDate <= #" + getDate + "#";

    PreparedStatement prepStmt = conn.prepareStatement(GET_ALL);
    ResultSet rs = prepStmt.executeQuery();
}