java - 执行准备语句时出现 java.sql.SQLSyntaxErrorException
问题描述
我试图运行preparedStatement ps
以检查数据是否存在于数据库中。然后它将运行更新(如果存在)或插入(如果不存在)。但是,我收到语法错误
java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'order WHERE date = '2019-05-22'' 附近使用正确的语法
我无法发现错误在哪里。任何人都可以帮忙吗?
PreparedStatement ps,ps1;
ps =con.prepareStatement("Select 1 from order WHERE date = ?");
ps.setString(1, date);
ResultSet rsOrder=ps.executeQuery();
if(rsOrder.next()) {
System.out.println("reOrder: true");
ps1 = con.prepareStatement("UPDATE order SET result = ? WHERE date = ?");
ps1.setString(1, json);
ps1.setString(2, date);
int rs=ps1.executeUpdate();
}else {
System.out.println("reOrder: false");
ps1 = con.prepareStatement("INSERT INTO order (date,result) VALUES (?,?)");
ps1.setString(1, date);
ps1.setString(2, json);
int rs=ps1.executeUpdate();
}
解决方案
order
是 MySQL 中的保留字。所以它不会允许,没有转义保留字。
您可以通过在关键字周围添加 ` 来转义它:
Select 1 from `order` WHERE date = ?
UPDATE `order` SET result = ? WHERE date = ?
INSERT INTO `order` (date, result) VALUES (?, ?)
推荐阅读
- angular - 跳过 Angular 8 和 Apache 中特定路径的 URL 路由
- java - 你好,我可以问一些关于java(Abstract,getter,setter)的问题吗?
- laravel - 如何有条件地在 Kernel.php 中加载 Laravel 中间件?
- java - 应用程序请求为空后使用 Autowired 获取实例
- python-3.x - Get KeyValue from Cloudformation Output with Python Boto3
- c - C reference static memory from initially allocated array
- python-3.x - Python - 为什么字符串变量不能在函数中“解析”正确?
- java - Java:如何使用 Luhn 检查和使用方法检查信用卡的有效性
- javascript - .map 不是函数 - TypeScript 错误
- python - Django 在覆盖保存函数调用时更改变量类型