发现一个严重的sql处理问题

在编写sql进行语句查询的时候, 莫名的报了个druid sql format错误。 本来以为是数据库连接池的问题。 跟踪代码发现原来是jfinal在处理order by的时候出了问题。 

原sql如下: 

select * from (

SELECT * FROM t_storage_daily_stat WHERE company_social_credit_code = 'xxx'

AND storage_date = 'xxx'

ORDER BY convert(hospital_name USING gbk) asc, storage_date desc, convert(material_name USING gbk) asc

) t

在经过jfinal的如下方法处理后:

image.png

这句totalRowSql变成了如下的sql:

select count(*) from (

SELECT * FROM t_storage_daily_stat WHERE company_social_credit_code = ? 

AND storage_date = ?

USING gbk) asc, storage_date desc, convert(material_name USING gbk) asc

) t

ORDER BY convert(hospital_name  这一块居然没了!! 没了!!

评论区

星矢

2021-02-01 15:31

查询文档发现了波总留下的解决办法
https://jfinal.com/doc/5-6

chcode

2021-02-01 18:09

@星矢 druid 有个PagerUtils.count 方法可以获取查询总数的sql,你可以基于这个工具类来改造jfinal的分页api来支持你的这种情况

星矢

2021-02-02 09:41

@chcode 我用了jfinal自带的 PageSqlKit.parsePageSql 改造了那条sql。 谢谢

热门反馈

扫码入社