JDBC执行预编译SQL报错但MySQL Workbench可正常运行问题求助
问题原因
order是 MySQL 的内置保留关键字,禁止直接作为表名、字段名等标识符使用,你代码中的SQL语句直接写了INSERT INTO order没有对保留字做转义,JDBC 驱动解析SQL时会直接抛出语法错误。- 你在 MySQL Workbench 中可以执行填充参数后的SQL,一般是两种情况:要么你复制出来的SQL实际已经手动/自动给
order加了反引号转义,要么你使用的Workbench版本默认开启了保留字兼容配置,JDBC驱动的SQL解析规则更严格,所以出现两边执行结果不一致的情况。
解决方案
推荐两种修复方式,按需选择即可:
- 长期最优方案:修改表名避开保留字
将表名从order修改为非关键字的名称,比如orders、order_info,同步修改代码中的SQL语句即可:
String order = "INSERT INTO orders SET ord_name = ?, shipcost = ?, price=?, supplierid=?, userid=?, suppliername=?, shippingdate=?, shipaddress=?, timestmp=?";
这种方式可以彻底避免后续出现同类保留字冲突问题。
- 临时兼容方案:对保留字加反引号转义
如果不方便修改表结构调整表名,只需要在SQL语句中给作为表名的order用英文反引号包裹转义即可:
String order = "INSERT INTO `order` SET ord_name = ?, shipcost = ?, price=?, supplierid=?, userid=?, suppliername=?, shippingdate=?, shipaddress=?, timestmp=?";
注意反引号是英文输入法下Tab键上方的符号,不要和单引号混淆。
内容的提问来源于stack exchange,提问作者LittleLeg
相关产品推荐
相关产品推荐

