首页 >数据库 >mysql教程 >为什么`s.executeQuery(query)`会导致MySQLSyntaxErrorException'near '?'”?

为什么`s.executeQuery(query)`会导致MySQLSyntaxErrorException'near '?'”?

Patricia Arquette
Patricia Arquette原创
2024-12-23 08:44:10743浏览

Why Does `s.executeQuery(query)` Cause a MySQLSyntaxErrorException

“?”附近的MySQLSyntaxErrorException:使用PreparedStatements解决语法错误

在Java中执行PreparedStatements偶尔会遇到语法错误,其中之一是可怕的“接近'?'”异常。要了解其原因和解决方案,让我们深入研究该问题。

问题描述

尝试执行PreparedStatement会导致MySQLSyntaxErrorException,错误代码为1064,指示语法错误。使用 MySQL 查询浏览器替换查询中的值成功,表明问题出在代码中。

相关代码

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); // Error

异常

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

解决办法

这个错误的根本原因是MySQL遇到未处理的“?”在 SQL 查询中。要解决此问题,请按照下列步骤操作:

  1. 覆盖的准备好的查询: 请注意,代码覆盖了PreparedStatements 的预期行为。行 ResultSet rs = s.executeQuery(query);不正确。
  2. 正确执行: 相反,使用无参数的PreparedStatement#executeQuery() 方法正确执行准备好的查询。
ResultSet rs = s.executeQuery();

附加注意事项

  • 资源泄漏:代码未正确关闭连接、语句和结果集。实现 try-with-resources 块以避免资源泄漏。

以上是为什么`s.executeQuery(query)`会导致MySQLSyntaxErrorException'near '?'”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn