Java и Access - используйте подготовленное заявление и получите дату - PullRequest
0 голосов
/ 18 февраля 2019

Я делаю приложение JavaAFX с использованием базы данных MS Access 2007.Мне нужно извлечь данные из базы данных путем фильтрации после даты.

Это хорошо работает:

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();
}

Что яделаю неправильно или что я не делаю.Я использую, конечно, библиотеку ucanaccess в версии 4.0.3.Любое предложение или совет?

1 Ответ

0 голосов
/ 18 февраля 2019

В 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();
}
...