如果你想的取得一個結果集的行數,怎麼辦?
在ResultSet對象裡面,我們找不到取得結果行數的辦法。
其實我們通常的解決方法無非有一下幾種:
[1]
Connection con=....
Statement stmt = con.createStatement();
String sqlStr = "count(*) as total ";
ResultSet rst = stmt.executeQuery(sqlStr);
rst.next();
int total = rst.getInt("total");
缺點:如果想要遍歷結果集,你不得不在執行一次查詢,取得結果集。
[2]
String accQrySql = "select * from accounts";
Connection con = DBUtils.getConnection();
Statement stmt = con.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rst = stmt.executeQuery(accQrySql);
你可以通過下面的方法來取得結果集的記錄數目
rst.last();
int total = rst.getRow();
這時,你可以取得記錄數目。
如果
while(rst.next()){
........
}
int total = rst.getRow();
你將得到的total是0
因為,getRow是在遍歷結果集的時候的指針,也是在結果集內移動的指針,也就是說 ,指向了當前的記錄索引號,所以,在進行結果集的遍歷前和後都被重置成0。
所以,想取得記錄的條數,可以把指針移到最後一條記錄,然後取得當前記錄的編號 就是記錄的條數。
所以,必須用
rst.last();
之後才能用 rst.getRow()來取得,才能取到值。
注意:想要用這種方法來取得結果集的行數,必須用 可滾動結果集
Statement stmt = con.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
否則,你就不能執行
rst.last()
也就不能取得結果集的條數。