无法将值传递给 PreparedStatement - 最后的第五个参数被跳过

Unable to pass values to PreparedStatement - last fifth argument is skipped

我有以下问题。我有使用查询检查给定地点从开始到结束的时间是否有任何预订的方法,以检查用户是否可以在给定时间预订该地点然后 returns Ture of False。我的问题是每次我的 ResultSet 都等于 null。我一步一步调试,所有变量都正确传递。使用调试器,我发现在传递了 4 个参数(第二次开始日期)后,第五个参数被跳过并且 myRs 值保持为空。此外,通过后的第 4 个参数用绿线下划线但不显示任何通信。我正在使用 Netbeans。我不知道是怎么回事。这是我的 DBUtil 方法代码:

public boolean doesBookExist(int number, Date start, Date end) throws Exception {

    boolean result = false;

    Connection myConn = null;
    PreparedStatement myStmt = null;
    ResultSet myRs = null;

    try {
        // get a connection
        myConn = dataSource.getConnection();

        // create sql for validation
        String sqlValidate = "SELECT * FROM `rezerwacje_miejsc`"
                + " WHERE `NR_MIEJSCA`=?"
                + " AND (`START` BETWEEN ? AND ?"
                + " OR KONIEC` BETWEEN ? AND ?)";

        myStmt = myConn.prepareStatement(sqlValidate);

        myStmt.setInt(1, number);
        myStmt.setDate(2, new java.sql.Date(start.getTime()));
        myStmt.setDate(3, new java.sql.Date(end.getTime()));
        myStmt.setDate(4, new java.sql.Date(start.getTime()));
        myStmt.setDate(5, new java.sql.Date(end.getTime()));

        // execute query
        myRs = myStmt.executeQuery(sqlValidate);

        // check if there was a match
        result = myRs.next();
        return result;
    } finally {
        // close JDBC objects
        close(myConn, myStmt, myRs);
    }

这是不正确的:

myRs = myStmt.executeQuery(sqlValidate);

应该是:

myRs = myStmt.executeQuery();

接受字符串的 executeQuery 版本是 Statement (API design problem). You want the one without parameters, which is provided by PreparedStatement 的延续。


查询中还有一个拼写错误,我认为它一定只是在问题中,而不是真正的代码中:您的反引号不匹配(在 KONIEC 之后但没有在它之前)。