转载: https://ask.youkuaiyun.com/questions/7408770
查询近一个月总数sql,mapper如下:
<select id="countMonthExp" parameterType="com.hky.domain.Experience"
resultType="java.lang.Integer">
select COUNT(1) from TB_EXPERIENCE exp
where exp.creatdate>DATE_SUB(CURDATE(), interval 1 MONTH)
and exp.cstatus = 1
</select>
报错信息如下:
dastudy- 2021-03-22 17:30:29 [http-nio-8000-exec-5] ERROR c.a.druid.filter.stat.StatFilter - merge sql error, dbType com.alibaba.druid.pool.DruidDataSource, druid-1.1.22, sql : select
COUNT(1) res
from TB_EXPERIENCE exp
where exp.creatdate>DATE_SUB(CURDATE(), interval 1 MONTH)
and exp.cstatus = 1
com.alibaba.druid.sql.parser.ParserException: TODO. pos 97, line 4, column 43, token INTERVAL
如果interval加反单引号,依旧会报错,提示sql错了。
换种写法传个值过来,可以解决,但是想知道如果想要用这个关键字,要怎么做呢?
解答:
看报错是 Duird 的 StatFilter - merge sql 时出错了,可以在配置里把 statFilter 的 mergeSql 功能关掉, 参考官方文档:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
Druid内置提供一个StatFilter,用于统计监控信息。(durid 会提供一个监控界面,这个StatFilter 会提供监控界面的统计数据,开启关闭对本身程序不会影响)
springboot 开启监控界面 配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
useGlobalDataSourceStat: true
# 开启了 druid 监控界面
stat-view-servlet:
enabled: true
login-username: druid
login-password: druid
url-pattern: /druid/*
关闭监控统计
把 connectionProperties: druid.stat.mergeSql=true;
mergeSql=true 改为 false 即可。
另一篇文章记录此问题:
链接:https://blog.youkuaiyun.com/T_emmmm/article/details/106217683
拼接SQL 报了这个异常 但不影响结果的返回 记录一下!!!
[mergeSql,149] - merge sql error, dbType oracle, druid-1.1.14, sql : ··· ···
com.alibaba.druid.sql.parser.ParserException: error, pos 355, line 1, column 355, token STAR
把 merge-sql : true 改为false 目前没其他办法。。。


博客记录了Druid的StatFilter - merge sql报错问题,报错信息为com.alibaba.druid.sql.parser.ParserException。即便给interval加反单引号仍报错。解决办法是在配置里把statFilter的mergeSql功能关掉,将connectionProperties中的mergeSql=true改为false。
9123

被折叠的 条评论
为什么被折叠?



