oracle进行order by,排序字段值相同时,导致分页数据出现相同,加入rowid的解决方法

由于项目开发中遇到order by排序有相同的值,导致分页数据总查询出第一页的数据,查了些资料说是要在order by条件后面再加入rowid可以解决这个问题;项目又要兼容多种数据库,所以只能在java中拦截和修改oralce查询语句中order by动态拼接的语句,搞了几小时终于弄好了,基本耗在正则表达式上了,做一下记录


//将sql转小写,方便正则匹配

String strings = sql.toLowerCase();

//order by 正则表达式(适用order by各种排序条件)

String regexp = "order\\s{1,}by\\s{1,}([a-zA-Z0-9_]{1,}(\\sasc|\\sdesc)?\\s{0,},\\s{0,})*[a-zA-Z0-9_]{1,}(\\s{1,}asc|\\s{1,}desc)?";

//替换sql中多个空格

strings = strings.replaceAll("\\s{1,}", " ");

//创建一个匹配模式

Pattern r = Pattern.compile(regexp);

//匹配客串

Matcher m = r.matcher(strings);

while (m.find()) {

//替换order by条件,加入rowid排序

 strings = strings.replaceAll(m.group(0), m.group(0)+",rowid ");

}

//重新拼接新的sql

pagingSelect.append(strings);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值