问题:
使用PreparedStatement执行查询时在 Java 中,出现 MySQLSyntaxErrorException 并带有错误消息:“您的 SQL 语法中有错误...附近'? 或 MemberName = ?'."
代码:
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);
原因:
语法错误是由 SQL 查询中的问号(?)引起的。 MySQL 将其解释为字面上的问号,而不是参数占位符。这会导致 SQL 语法无效。
解决方案:
要解决此问题,请将 SQL 查询中的问号替换为命名参数。这将允许PreparedStatement正确绑定参数值:
String query = "select MemberID, MemberName from members where MemberID = :member_id or MemberName = :member_name";
在Java代码中,使用PreparedStatement#setString方法设置命名参数:
s.setString("member_id", "2"); s.setString("member_name", "zen");
或者,您可以使用无参数 s.executeQuery() 方法而不是 s.executeQuery(query) 来防止用原始查询覆盖准备好的查询
资源泄漏:
请注意,提供的代码存在资源泄漏问题。 Connection、Statement 和 ResultSet 对象应在 finally 块中关闭,以防止资源耗尽。
以上是为什么我的PreparedStatement会导致MySQL出现'您的SQL语法错误”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!