java - 使用预准备语句的 SQL 语法错误

标签 java mysql sql jdbc

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 语法错误”

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 '?) and (creator = ?)' at line 1

发生什么事了?我该如何修复它?

最佳答案

我的猜测是 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() 不带任何参数。由于您已经准备了语句并绑定(bind)了参数,因此您只需执行该查询即可。

令我惊讶的是 MySQL 对此有所提示,因为从我在本地测试中看到的情况来看,您当前的查询执行应该没有任何问题。

关于java - 使用预准备语句的 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54423409/

相关文章:

java - 在 Java 中传递反斜杠字符串会出现 unicode 错误异常

mysql - PostgreSQL:从 MySQL 转储导入数据库 - 语法错误

php - 查询 MySQL 以在 PHP 中显示用户帖子 - 不确定如何制定查询

php - 更新另一个表上的特定表字段

java - log4j 在 Catalina.out 和日志文件之间重复日志

java - 为什么我的用户名没有出现在 TextView 中?

java - Java 的 AVL 树实现

mysql - "Secondary"查询

mysql - brew 和 mysql55 安装失败

sql - 仅使用 sql 解析表达式\查找表达式值的顺序