我有一個SQL查詢,我想知道該SQL查詢返回多少行。現在的問題是我想知道事前結果的數量,這意味着在運行SQL查詢之前。Java正則表達式:要知道一個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」子句。我太受刪除「排序」條款如下正則表達式:
Pattern.compile("(?:)from\\s+(.*)*" , Pattern.CASE_INSENSITIVE);
但它成爲嵌套查詢的情況更加複雜。
任何Java Regex專家都可以幫忙嗎?我使用postgres作爲數據庫。
我想你會更好使用SQL解析器。嘗試谷歌搜索一個或看到這個問題http://stackoverflow.com/questions/660609/sql-parser-library-for-java –
我不知道它是否會幫助我。在我的情況下,「Select coun(*)」查詢是在原始查詢的基礎上在運行時生成的。 –