Druid版本1.1.9报错Caused by: java.sql.SQLException: sql injection violation, syntax error: TODO IDENTIFIER : CREATE TEMPORARY TABLE temp_ball_classify (id int8 NOT NULL,create_time TIMESTAMP,create_by VARCHAR,classify_name VARCHAR)
代码如下:
测试类
mapper层
xml编写sql语句
报错信息
我在navicat中尝试了一下执行相同的sql创建临时表语句,确实是能执行的。首先排除了语句错误的问题,TEMP或TEMPORARY在navicat中都是可以执行成功的。但是在Mybatis中无法执行成功。
然后我又进行了一次测试,在xml中的sql创建临时表语句把TEMPORARY删除,直接创建一张物理表,确实成功的执行了。。。
那么,问题出在哪里了。。什么原因导致使用TEMP或TEMPORARY无法创建临时表。
在网上搜索了一下,说把Druid版本升级到最新,我试着升级到了最新,确实不报这个错误了,又报了一个新的错误。。。
Caused by: java.sql.SQLException: sql injection violation, dbType postgresql, , druid-version 1.2.23, syntax error: syntax error, error in :'CREATE TEMPORARY TABLE temp_ball_clas', expect TABLE, actual null, pos 16, line 1, column 8, token IDENTIFIER TEMPORARY : CREATE TEMPORARY TABLE temp_ball_classify (id int8 NOT NULL,create_time TIMESTAMP,create_by VARCHAR,classify_name VARCHAR)
syntax error, error in :'CREATE TEMPORARY TABLE temp_ball_clas', expect TABLE, actual null, pos 16, line 1, column 8, token IDENTIFIER TEMPORARY
然后我找到了Druid的配置,把全部配置都注释掉,居然可以成功的执行了。。然后我一个一个配置排查发现,有个filters的配置,引起的报错,只要把这个注释了,就能成功执行,不管切换什么版本的Druid。。。都能成功执行。。。。。