gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:33:34 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com