繁体   English   中英

Java Regex:了解SQL查询要返回的行数

[英]Java Regex: To know the number of rows to be returned by a SQL Query

我有一个SQL查询,我想知道该SQL查询将返回多少行。 现在的问题是我想事先知道结果数,这意味着在运行SQL查询之前。

我可以通过ResultSet.getRow()轻松完成此操作,以从结果集中获取总行数。 但是根据要求,只有知道该查询要返回的行数之后,才能获得结果集。

我尝试了以下Java正则表达式来解决此问题:

String orgQuery = "select * from emp where id<1210 and salary>55000;" 
Pattern p= Pattern.compile("(?:)from\\s+(.*)*" , Pattern.CASE_INSENSITIVE);
 Matcher m= p.matcher(orgQuery);
    if (m.find()) {
                   countQuery = "SELECT COUNT(*) as total "+ m.group(1);
                   System.out.println(countQuery);
                  }

这个文件完美工作,我得到“ countQuery”为:

SELECT COUNT(*) as total from emp where id<1210 and salary>55000

这样,我可以很容易地预先知道要返回的行数,但是当我的查询变得更复杂时,就会出现问题,如以下两点:-如果嵌套查询(例如#query2),则更加复杂。

#query1: select * from emp where id<1210 and salary>55000 order by dept, salary desc;

#query2: select name from emp where id IN (select id from emp where id < 1210 group by salary , id  order by id  ASC limit 10) order by id DESC  limit 10 

我认为主要问题在于“ Order By”子句。 我也可以通过以下正则表达式删除“ Order By”子句:

Pattern.compile("(?:)from\\s+(.*)*" , Pattern.CASE_INSENSITIVE);

但是在嵌套查询的情况下,它变得更加复杂。

任何Java Regex专家都能帮忙吗????? 我正在使用postgres作为数据库。

像这样包装您现有的查询:

select count(*) from (<existing query>)

与您给定的示例:

String orgQuery = "select * from emp where id<1210 and salary>55000";
String countQuery = "select count (*) from (" + orgQuery + ')'; 

我知道这适用于Oracle。 我没有使用过postgres,所以我不确定是否有任何东西会阻止这种方法在那儿工作。

我会提醒您先获取计数的想法,但是,在执行计数和实际查询之间数据可能会发生变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM