當(dāng)我們執(zhí)行完一條Sql語(yǔ)句,獲取到一個(gè) ResultSet 對(duì)象后,有時(shí)我們需要立即知道到底返回了多少個(gè)元素,但是 ResultSet 并沒(méi)有提供一個(gè) size() 方法 or length 的屬性,我們可以一個(gè)一個(gè)調(diào)用 next() 去累加計(jì)算,但是我們還有更好的辦法 :
PreparedStatement statement = ......;
ResultSet results = statement.executeQuery();
// 將游標(biāo)移動(dòng)到最后一行上
results.last();
// 得到當(dāng)前的 row number,在 JDBC 中,row number 從1開(kāi)始,所以這里就相當(dāng)于行數(shù)
int rowCount = results.getRow();
//此時(shí)游標(biāo)執(zhí)行了最后一行,如果我們后面還想從頭開(kāi)始調(diào)用 next()遍歷整個(gè)結(jié)果集,我們可以將游標(biāo)移動(dòng)到第一行前面
results.beoreFirst();
// 通過(guò)上述這步操作,我們算是回復(fù)了結(jié)果集到初始狀態(tài)(即剛查詢出來(lái)的狀態(tài))
注意 :上述這一系列移動(dòng)游標(biāo)的操作是有前提的,我們的結(jié)果集必須是 scrollable(可滾動(dòng)的) !這個(gè)是由 statement 對(duì)象決定,我們?cè)趧?chuàng)建 statement 對(duì)象可以指定如下參數(shù) :
conn = getConnection();
statement = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
通過(guò)上述 statement 獲取的 ResultSet 就是可以滾動(dòng)的,如果我們只是 conn.prepareStatement(sql) 來(lái)獲取的 statement 對(duì)象,是不可以滾動(dòng)的(只可以調(diào)用 next() 向前遍歷),調(diào)用任何上述移動(dòng)游標(biāo)的方法,都會(huì)拋出 SQLException .
ResultSet 還為我們定義了如下常量 :
ResultSet.TYPE_FORWARD_ONLY只能向前滾動(dòng)
ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE這兩個(gè)方法都能夠?qū)崿F(xiàn)任意的前后滾動(dòng),使用各種移動(dòng)的ResultSet指針的方法。
————————————————
版權(quán)聲明:本文為CSDN博主「DrifterJ」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/drifterj/article/details/17720271
聯(lián)系客服