7
回答
jfinal Dbkit.replaceFormatSqlOrderBy(sql)在order by中有函数或者' “等就不能正确匹配
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

@jfinal  比如

order by charindex(rtRim(res.ReqDepartment),'JZ,MZ,W1,W2,W3,W4,Z1,Z2,Z3,Z4,JH,H1,H2,H3,H4')

用sqlkit.replaceFormatSqlOrderBy后只能去掉order by,直接导致paginate报错。

举报
linxp
发帖于2年前 7回/507阅
共有7个答案 最后回答: 2年前
这个是在上一版本中忘了升级了,暂时可以改下  sql 语句,让其可以被 replace 掉,下一版升下正则

引用来自“linxp”的评论

源码还有判断
if (index > sql.toLowerCase().lastIndexOf(")"))

这里的)是order by里的),所以判断为false。。

jfinal 源码中没有这一行。 这是哪里的代码?
--- 共有 1 条评论 ---
linxp就在 DbKit.replaceFormatSqlOrderBy(String sql)里,我在oscgit上下的master zip 2年前 回复
String order=sql.substring(index);
Pattern pattern = Pattern.compile("\\)");
Matcher matcher = pattern.matcher(order); int count=0; while(matcher.find()){
   count++;
}

Pattern pattern2 = Pattern.compile("\\(");
Matcher matcher2 = pattern2.matcher(order); int count2=0; while(matcher2.find()){
   count2++;
} if (index > sql.toLowerCase().lastIndexOf(")")||count==count2) {
   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;

}

最后改成这样了,虽然好像麻烦了一点。。。

顶部