开发者社区> 问答> 正文

jfinal 分页排序bug? 400 报错

jfinal 分页排序bug? 400 报错

@JFinal 你好,想跟你请教个问题:

SELECT * FROM T ORDER BY length(id)

分页时出错,源代码

public static String replaceFormatSqlOrderBy(String sql) {
sql = sql.replaceAll("(\\s)+", " ");
int index = sql.toLowerCase().lastIndexOf("order by");
if (index > sql.toLowerCase().lastIndexOf(")")) {
String sql1 = sql.substring(0, index);
String sql2 = sql.substring(index);
sql2 = sql2.replaceAll("[oO][rR][dD][eE][rR] [bB][yY] [\u4e00-\u9fa5a-zA-Z0-9_.]+((\\s)+(([dD][eE][sS][cC])|([aA][sS][cC])))?(( )*,( )*[\u4e00-\u9fa5a-zA-Z0-9_.]+(( )+(([dD][eE][sS][cC])|([aA][sS][cC])))?)*", "");
return sql1 + sql2;
}
return sql;
}
查询总记录数的sql将为:select count(*) from t order by length(id) 

不知道2.2是否已修复此bug

展开
收起
爱吃鱼的程序员 2020-06-05 12:10:05 523 0
2 条回答
写回答
取消 提交回答
  • 应该使用limit offset分页吧

    limit 是返回的条目数 offset 是开始的地方

    2021-10-12 10:56:28
    赞同 展开评论 打赏
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    m######

    2.2没问题 但是3.0却又出来了。@jfinal

    ######

    用一下 jfinal 3.0,该版本没有用正则处理过 order by,所以是正确的

    ######回复 @JFinal : bingo######回复 @乌龟壳 : 去除了处理 order by 的正则以后,就很严谨了######用这种不严谨的做法(可能不需要完美的比如分析sql,构建语法树那些),建议注释和文档里写得足够清楚可能的缺陷

    2020-06-05 12:10:23
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载