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

标签 java sql jdbc prepared-statement

我遇到以下问题。我有一种方法,使用查询来检查从开始到结束的时间是否有给定地点的预订,以检查用户是否可以在给定时间内预订这个地点,然后返回 Ture 或 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);
    }

最佳答案

这是不正确的:

myRs = myStmt.executeQuery(sqlValidate);

应该是:

myRs = myStmt.executeQuery();

接受字符串的 executeQuery 版本是 Statement 的延续版本。 (API设计问题)。你想要一个不带参数的,即 provided by PreparedStatement .

<小时/>

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

关于java - 无法将值传递给PreparedStatement - 最后第五个参数被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51211014/

相关文章:

java - Spring Boot Autowiring @ManagedResource

sql - 使用JOIN或EXISTS是否可以获得更好的性能?

android - 我可以在没有任何 web 服务的情况下使用 JDBC 从 android 连接到 mysql 吗?

java - 为什么人们使用 Velocity 和/或 NVelocity?

java - 访问 BufferedImage 线程是否安全

c# - 获取前 5 个频繁值及其总计数 Linq-to-Sql

java - Oracle Thin Driver 和 RAC DB 的透明故障转移

java - 如何输入日期和时间格式

java - 使用 Java (HTMLUnit) 抓取网页,然后将结果写入 mySQL 数据库

sql - 仅选择特定列仅包含特定值的 ID