如果你想的取得一個(gè)結(jié)果集的行數(shù),怎么辦?
在ResultSet對(duì)象里面,我們找不到取得結(jié)果行數(shù)的辦法。
其實(shí)我們通常的解決方法無(wú)非有一下幾種:
[1]
Connection con=....
Statement stmt = con.createStatement();
? ?
?String sqlStr = "count(*) as total ";
?ResultSet rst = stmt.executeQuery(sqlStr);
?
?rst.next();
int total =? rst.getInt("total");
缺點(diǎn):如果想要遍歷結(jié)果集,你不得不在執(zhí)行一次查詢,取得結(jié)果集。
[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);
?????????????????????? 你可以通過(guò)下面的方法來(lái)取得結(jié)果集的記錄數(shù)目
?????????????????????? rst.last();
?????????????????????? int total = rst.getRow();
?????????????????????? 這時(shí),你可以取得記錄數(shù)目。
?????????????????????? 如果
while(rst.next()){
........
}???? ?
int total = rst.getRow();
你將得到的total是0
因?yàn)椋琯etRow是在遍歷結(jié)果集的時(shí)候的指針,也是在結(jié)果集內(nèi)移動(dòng)的指針,也就是說(shuō),指向了當(dāng)前的記錄索引號(hào),所以,在進(jìn)行結(jié)果集的遍歷前和后都被重置成0。
所以,想取得記錄的條數(shù),可以把指針移到最后一條記錄,然后取得當(dāng)前記錄的編號(hào)就是記錄的條數(shù)。
所以,必須用
rst.last();
之后才能用 rst.getRow()來(lái)取得,才能取到值。
注意:想要用這種方法來(lái)取得結(jié)果集的行數(shù),必須用 可滾動(dòng)結(jié)果集???? ?
?? ?Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
否則,你就不能執(zhí)行
rst.last()
也就不能取得結(jié)果集的條數(shù)。
|----------------------------------------------------------------------------------------|
版權(quán)聲明 版權(quán)所有 @zhyiwww
引用請(qǐng)注明來(lái)源 http://www.aygfsteel.com/zhyiwww
|----------------------------------------------------------------------------------------|