首页 > Java > java教程 > 为什么我的PreparedStatement会导致MySQL出现'您的SQL语法错误”异常?

为什么我的PreparedStatement会导致MySQL出现'您的SQL语法错误”异常?

Linda Hamilton
发布: 2024-12-06 19:24:12
原创
815 人浏览过

Why Does My PreparedStatement Result in a

使用PreparedStatement时,您的SQL语法有错误

问题:

使用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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板