解决数据库PGSQL,在Mybatis中创建临时表报错TODO IDENTIFIER,连接池用的Druid。更换最新版本Druid仍然报错解决

发布于:2024-07-03 ⋅ 阅读:(9) ⋅ 点赞:(0)

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

在这里插入图片描述