人大金仓数据库merge sql error, dbType kingbase, druid-1.2.5, sql错误解决

    • 一、背景
    • 二、错误分析
    • 三、解决思路
    • 四、总结

一、背景

生产环境总是提示该错误信息,但是sql可以正常查出结果,项目经理提了好几次,作为一名合格的程序员必须解决这个问题。

二、错误分析

完整报错信息merge sql error, dbType kingbase, druid-1.2.5, sql : SELECTxxxxAND info.name like concat('%',?::varchar,'%') com.alibaba.druid.sql.parser.ParserException: syntax error, expect ), actual :: pos 1834, line 67, column 57, token ::
  1. 提示merge sql错误
  2. 提示::附近有错误

三、解决思路

  1. 针对错误提示一

    在配置文件中发现开启了sqlmerge配置,改为false后发现不再报该错误。
    通过查看资料发现这个配置有用
druid.stat.mergeSql=true:此属性是 Druid 数据源的一个统计功能,它可以将具有相同 SQL 语句但不同参数的查询请求合并为一个请求,从而减少网络传输和资源消耗。当多个 SQL 语句在客户端执行之前被合并时,生成一个带有占位符的 SQL 语句。这是为了减少通信开销,而在服务器端将这些占位符替换为实际的参数值。

最好还是开启mergeSql=true
2. 针对错误提示二

通过查阅资料,发现在 SQL 查询的 concat 函数使用过程中出现了语法错误,Kingbase 数据库不支持::的写法。

推荐一下写法AND 表名称.字段名称 like '%' || " />|| '%'

四、总结

在KindBase数据库想要进行模糊搜索推荐使用 | | 进行拼接