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

时间:2018-07-06 13:00:41

标签: java sql jdbc prepared-statement

我有以下问题。我有使用查询的方法来检查从开始到结束的时间是否对给定位置有任何保留,以检查用户是否可以在给定时间预订该位置,然后返回Ture of False。我的问题是每次ResultSet等于null时。我一步一步调试,所有变量都正确传递。使用调试器,我发现在传递了4个参数(第二次开始日期)之后,第五个参数被跳过并且myRs值保持为空。同样,传递后的第四个参数用绿线下划线,但未显示任何通信。我正在使用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);
    }

1 个答案:

答案 0 :(得分:4)

这是不正确的:

myRs = myStmt.executeQuery(sqlValidate);

应该是:

myRs = myStmt.executeQuery();

接受字符串的executeQuery版本是Statement的保留(API设计问题)。您想要一个没有参数的provided by PreparedStatement


查询中还有一个错别字,我认为这只是问题所在,而不是真正的代码:您有错配的反引号(您在KONIEC之后但在反引号之前没有)。