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