gpt4 book ai didi

java - 尝试执行PreparedStatement时出现MySQLSyntaxErrorException 接近 "?"

转载 作者:行者123 更新时间:2023-11-29 17:42:38 25 4
gpt4 key购买 nike

我正在尝试使用 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!
<小时/>

与问题无关,您的代码正在泄漏资源。几个小时后数据库将耗尽它们,您的应用程序将崩溃。要解决此问题,您需要遵循 JDBC 惯用法,在 finally block 中关闭 ConnectionStatementResultSet获取它们的 try block 的位置。检查JDBC basic tutorial了解更多详情。

关于java - 尝试执行PreparedStatement时出现MySQLSyntaxErrorException 接近 "?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49938489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com