在Java中,当使用PreparedStatement执行查询时,可能会遇到MySQLSyntaxErrorException,错误号为1064,表示“?”附近有语法错误。即使查询在具有替换值的 MySQL 查询浏览器中工作,也可能会发生这种情况。
经过仔细检查,很明显 MySQL 无法解释“?” SQL 查询中的占位符,认为其语法无效。这是因为PreparedStatement 尚未替换这些占位符。
您共享的代码片段错误地用原始版本覆盖了准备好的查询。要纠正此问题,请使用PreparedStatement#executeQuery()而不是Statement#executeQuery(String):
PreparedStatement s = conn.prepareStatement(query); s.setInt(1, intValue); s.setString(2, strValue); rs = s.executeQuery(); // Correct
注意:虽然与当前问题无关,但您的代码无法关闭连接、语句和结果集。这种遗漏可能会导致资源耗尽和随后的应用程序崩溃。通过在finally块中关闭这些对象来实现正确的JDBC习惯用法:
try (Connection conn = DriverManager.getConnection(...); PreparedStatement s = conn.prepareStatement(...); ResultSet rs = s.executeQuery()) { // Query execution code } finally { if (rs != null) rs.close(); if (s != null) s.close(); if (conn != null) conn.close(); }
以上是为什么我在使用 MySQLPreparedStatements 时会收到''?'附近的语法错误”?的详细内容。更多信息请关注PHP中文网其他相关文章!