尝试在 Java 中使用PreparedStatement 执行查询时,出现错误,指示“?”附近有语法错误。例外是:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? or MemberName = ?' at line 1
String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?"; Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD); PreparedStatement s = conn.prepareStatement(query); s.setInt(1, 2); s.setString(2, "zen"); ResultSet rs = s.executeQuery(query); // Fail!
发生错误是因为MySQL无法识别“?”在 SQL 查询中作为占位符。这是由于以下调用造成的:
rs = s.executeQuery(query); // Fail!
不使用不带参数的PreparedStatement#executeQuery,而是传递原始查询字符串,这会覆盖准备好的语句。
解决该问题,PreparedStatement的executeQuery方法应该不带参数调用:
rs = s.executeQuery(); // OK!
虽然与原始问题无关,但代码泄漏了资源。为了防止这种情况,应该使用 JDBC 惯用法关闭资源:
try { // Acquire resources here } catch (Exception e) { // Handle exception } finally { // Close resources here }
以上是为什么我的 Java 中的PreparedStatement 在'?”附近抛出 MySQL 语法错误?的详细内容。更多信息请关注PHP中文网其他相关文章!