微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 尝试执行PreparedStatement时,“?”附近的MySQLSyntaxErrorException

我正在尝试使用Java中的PreparedStatement执行查询.

我尝试执行查询时出现错误号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);

这是我得到的例外:

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

解决方法:

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查询中.这确实是无效的sql语法.所以它不会被PreparedStatement取代.你猜怎么着?

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(query); // Fail!

您正在使用原始查询覆盖准备好的查询!您需要调用无参数PreparedStatement#executeQuery()方法而不是Statement#executeQuery(String).

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // OK!

与此问题无关,您的代码正在泄漏资源.数小时后,数据库将耗尽,您的应用程序将崩溃.要解决这个问题,您需要遵循在获取它们的try块的finally块中关闭Connection,Statement和ResultSet的JDBC习惯用法.有关更多详细信息,请查看JDBC basic tutorial.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐