![](/img/trans.png)
[英]Push Mysql table contents (returned rows of sql query) into java hashmap
[英]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.