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

时间:2016-06-09 11:51:36

标签: java regex

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

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

我尝试使用以下Java Regex解决问题:

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作为DB。

1 个答案:

答案 0 :(得分:2)

像这样包装现有的查询:

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

用你给出的例子:

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

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

我会先注意这个先计算的想法,然而,数据可能会在执行计数和实际查询之间发生变化。