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。。。都能成功執行。。。。。