java - 使用准备好的语句的 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 = ?)' 附近使用正确的语法
这是怎么回事?我如何解决它?
解决方案
我的猜测是 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 抱怨这一点,因为从我在这里看到的本地测试来看,您当前的查询应该可以毫无问题地执行。
推荐阅读
- c++ - 在 CMakeLists.txt 中执行 cmake 与在终端中执行 cmake 有什么区别,我们如何使其行为相同?
- c# - Xamarin/XAML/C# - 构建一个计算 DateTime 数组中所有周末天数的方法
- matrix - #Fail2ban,矩阵(突触)的失败正则表达式请求
- flutter - Flutter 没有为“Object”类型定义运算符“[]”
- android - 源图像的文件名无效 - 无法更改而不丢失消息
- lighthouse - 需要帮助了解多个构建后生成的 Lighthouse 服务器仪表板
- android - 底部导航视图中的片段路由
- mysql - mySql 更新查询返回 ERROR 1242: 1242: 子查询返回多于 1 行
- r - R Shiny:从上传的数据运行动态 For 循环
- postgresql - jsonb 交叉连接未在 Postgres 中返回 N*M 行