我有以下问题。我有使用查询的方法来检查从开始到结束的时间是否对给定位置有任何保留,以检查用户是否可以在给定时间预订该位置,然后返回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);
}
答案 0 :(得分:4)
这是不正确的:
myRs = myStmt.executeQuery(sqlValidate);
应该是:
myRs = myStmt.executeQuery();
接受字符串的executeQuery
版本是Statement
的保留(API设计问题)。您想要一个没有参数的provided by PreparedStatement
。
查询中还有一个错别字,我认为这只是问题所在,而不是真正的代码:您有错配的反引号(您在KONIEC
之后但在反引号之前没有)。