gpt4 book ai didi

java - 尝试执行 PreparedStatement 时 "?"附近的 MySQLSyntaxErrorException

转载 作者:可可西里 更新时间:2023-11-01 07:31:41 24 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/4131092/

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