Java 正则表达式 : To know the number of rows to be returned by a SQL Query

标签 java regex

我有一个 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,所以我不确定是否有任何因素阻止这种方法在那里工作。

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

关于Java 正则表达式 : To know the number of rows to be returned by a SQL Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37725204/

相关文章:

java - Wicket::如何在 CheckBoxMultipleChoice 的复选框中添加样式边距

java - 浮点精度

java - '&'运算符在字节到十六进制转换中的作用是什么?

Java 拆分正在吞噬我的角色

使用递归表达式匹配嵌套大括号的正则表达式?

javascript - 格式不固定时的正则表达式

javascript - 异常的 javascript 正则表达式结果,请解释!

c# - 如何从 Regex.Split 中获得正确的结果

java - xuggler 错误 - "cannot find symbol : class VideoImage"- 我缺少什么?

java - 无法在 Ubuntu 上运行 javac