如果你想的取得一個結果集的行數,怎么辦?
在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()
也就不能取得結果集的條數。
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://www.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2009-06-19 17:25
zhyiwww 閱讀(1966)
評論(2) 編輯 收藏 所屬分類:
java basic