首页 > 解决方案 > 使用准备好的语句的 SQL 语法错误

问题描述

String select = "select script from kit where (name = ?) and (creator = ?)";
PreparedStatement prepared = db.prepareStatement(select);
prepared.setString(1, name);
prepared.setInt(2, creator);
ResultSet result = prepared.executeQuery(select);

给我一个“你的 SQL 语法错误”

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '?) 和 (creator = ?)' 附近使用正确的语法

这是怎么回事?我如何解决它?

标签: javamysqlsqljdbc

解决方案


我的猜测是 JDBC 或您的底层数据库都不喜欢WHERE括号中的条款。尝试删除它们:

String select = "select script from kit where name = ? and creator = ?";
PreparedStatement prepared = db.prepareStatement(select);
prepared.setString(1, name);
prepared.setInt(2, creator);
ResultSet result = prepared.executeQuery();

另请注意,PreparedStatement#executeQuery()它不带任何参数。由于您已经准备好语句并绑定了参数,因此您只需要执行该查询。

我很惊讶 MySQL 抱怨这一点,因为从我在这里看到的本地测试来看,您当前的查询应该可以毫无问题地执行。


推荐阅读