我正在获取MySQL服务器版本以获取在'.null'附近使用的正确语法

时间:2019-01-23 12:30:28

标签: java sql database mysql-workbench

我收到此错误,我不为什么我在工作台上尝试了该语句,但它仍然有效。 我还希望改善日期减去代码的时间,基本上是从表中获取截止日期,并从今天的日期中减去。

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 :(得分:1)

最可能是因为book.getbookID()返回null,并且由于某种原因您在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,但是当然可能需要更改