我正在尝试将SQL准备好的语句发送到MySQL DB。这就是我所拥有的:
String sql1 = "SELECT idReimbursed_Funds As idReimFunds FROM reimbursedfunds Where ReimFundsName = ? AND Date = ?"; PreparedStatement pstmt1 = conn.prepareStatement(sql1); pstmt1.setString(1, reimfund.getReimFundsName()); pstmt1.setDate(2, (Date) reimfund.getDate()); ResultSet rs1 = pstmt1.executeQuery(sql1); while(rs1.next()){ idReimFunds = rs1.getInt("idReimFunds"); }
搜寻了这个问题之后,我找到了在问号或整个where子句周围使用括号的解决方案,例如:
String sql1 = "SELECT idReimbursed_Funds As idReimFunds FROM reimbursedfunds Where (ReimFundsName = ?) AND (Date = ?)";
不过这没有用。我收到由原始代码生成的相同错误消息:
“您的SQL语法有误;请查看与您的MySQL服务器版本相对应的手册,以找到在第1行附近使用’?)AND(Date =?)’的正确语法。
当我尝试在MySQL Workbench中使用SQL语句时,效果很好。有没有办法在JDBC中使用2 where子句?我知道在其他帖子中人们已经回答过,必须将其作为两个不同的查询发送,但是我想我想问的是,以防其他人阅读此帖子并知道某种方式。谢谢!
该行(除了 bgpDate所提到的问题外)是以下行: __
Date
ResultSet rs1 = pstmt1.executeQuery(sql1);
您正在尝试在准备好的语句上执行查询字符串,这是JDBC标准所不允许的(MySQL应该实际上抛出一个异常,而不是像当前那样将其发送到服务器,但是最终结果是相同的)。的文档Statement.executeQuery(String sql)说:
Statement.executeQuery(String sql)
抛出: -如果发生数据库访问错误,则在 closeSQLException上调用此方法Statement,给定的SQL语句产生除单个ResultSet对象以外的任何东西, 该方法在PreparedStatement或上调用CallableStatement
SQLException
Statement
ResultSet
PreparedStatement
CallableStatement
(强调我的)
原因是您要执行准备好的语句,而不要执行其他任何查询。您应该调用PreparedStatement.executeQuery()(因此不带参数):
PreparedStatement.executeQuery()
ResultSet rs1 = pstmt1.executeQuery();