Я получаю версию сервера MySQL для правильного синтаксиса, чтобы использовать около '.null' - PullRequest
0 голосов
/ 23 января 2019

Я получаю эту ошибку, и я не понимаю, почему я попробовал утверждение на верстаке, и оно сработало. Я также пытаюсь улучшить мой код вычитания дат, в основном я получаю крайний срок из таблицы и вычитаю из сегодняшней даты.

public boolean checkLessThanWeek(User userWhoWantsToExtendDeadline,BorrowedBook book) throws ParseException {
    try {
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT Deadline FROM library_students.borrowedcopies WHERE LenderToID =" + "'" + userWhoWantsToExtendDeadline.getId()+ "'"+"And Barcode="+"."+book.getbookID());
        if (rs.next()) {             
            SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
            Date deadline = format.parse(rs.getString(1));
            Date date=new Date();
            String today=format.format(date.getDate());
            date = format.parse(today);
            long milliseconds=date.getTime()-deadline.getTime();
            long days = milliseconds / (1000 * 60 * 60 * 24);
            System.out.print(days);

        }
        rs.close();
        return true;
    } catch (SQLException ex) {
        ex.printStackTrace();
        return false;
    }
} 

1 Ответ

0 голосов
/ 23 января 2019

Скорее всего, потому что book.getbookID() возвращает ноль и потому что у вас по какой-то причине есть точка (.) перед ней в вашем Sql. Помимо этого, желательно иметь параметризованный оператор Sql, использующий ?, а также хорошая базовая обработка ошибок.

if (userWhoWantsToExtendDeadline == null || book == null || book.getbookID() == null {
    //throw exception perhaps or log?
    return false;
}

String query = "SELECT Deadline FROM library_students.borrowedcopies WHERE LenderToID = ? AND Barcode = ?";
Statement stmt = con.createStatement(query);

stmt.setInt(1, userWhoWantsToExtendDeadline.getId());
stmt.setString(2, book.getbookID());
ResultSet rs = stmt.executeQuery();

Обратите внимание, что я предположил, что ваш первый параметр - int, а второй - String, но, разумеется, этот параметр может потребоваться изменить

...