首页 > 解决方案 > 带有特殊字符的 Java SQL 表名

问题描述

我有一个代码,它可以即时创建表格。这些表用于存储和获取不同进程的数据。

问题:表名是用“&”等特殊字符创建的。MySQL 允许使用特殊字符的表名。不是 MySQL 的问题。

当我使用 DBUtils 从此类表中查询数据时,我在特殊字符处出现异常。如果我使用的是普通的 jdbc,那么我可以逃脱那些并且可以处理数据。但是 DButils 不允许转义这些字符。

我尝试在表名中添加双引号并尝试处理,但问题仍然存在。有什么建议吗??

java.sql.SQLException: 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 '-AO_I   ( Datetime,  L, ' at line 1 
    at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)
    at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:491)
    at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:404)

删除所有列名和详细表名。表名是“NRI-AO_I” 代码将数据添加到数百个表中,但很少有失败。这些表名在表名中有特殊字符。名称中带有“&”或“-”的表会失败。

标签: javamysqlapache-commons-dbutils

解决方案


在表名中使用特殊字符是一个坏主意,但如果您没有其他选择,请用反引号引用您的模棱两可或“特殊”的表名。例如:

select * from `NRI-AO_I`

推荐阅读