采用JDBC進(jìn)行數(shù)據(jù)庫(kù)分頁(yè)查詢
?/**
? * 一次只從數(shù)據(jù)庫(kù)中查詢最大maxCount條記錄
? * @param sql 傳入的sql語(yǔ)句
? * @param startNo 從哪一條記錄開始
? * @param maxCount 總共取多少條記錄
? */
?public void getData(String sql,int startNo,int maxCount){
??Connection conn = ConnectionUtil.getConnection();
??try {
//???conn.prepareStatement(sql,游標(biāo)類型,能否更新記錄);
//????? 游標(biāo)類型:
//?????? ResultSet.TYPE_FORWORD_ONLY:只進(jìn)游標(biāo)
//?????? ResultSet.TYPE_SCROLL_INSENSITIVE:可滾動(dòng)。但是不受其他用戶對(duì)數(shù)據(jù)庫(kù)更改的影響。
//?????? ResultSet.TYPE_SCROLL_SENSITIVE:可滾動(dòng)。當(dāng)其他用戶更改數(shù)據(jù)庫(kù)時(shí)這個(gè)記錄也會(huì)改變。
//????? 能否更新記錄:
//?????? ResultSet.CONCUR_READ_ONLY,只讀
//?????? ResultSet.CONCUR_UPDATABLE,可更新
???PreparedStatement pstat = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
???//最大查詢到第幾條記錄
???pstat.setMaxRows(startNo+maxCount-1);
???ResultSet rs = pstat.executeQuery();
???//將游標(biāo)移動(dòng)到第一條記錄
???rs.first();
//???游標(biāo)移動(dòng)到要輸出的第一條記錄
???rs.relative(startNo-2);
???while(rs.next())
????System.out.println(rs.getInt(1));
??} catch (SQLException e) {
???e.printStackTrace();
??}
?}
?
?/**
? * 從數(shù)據(jù)庫(kù)中查詢所有記錄,然后通過(guò)游標(biāo)來(lái)獲取所需maxCount條記錄
? * @param sql 傳入的sql語(yǔ)句
? * @param startNo 從哪一條記錄開始
? * @param maxCount 總共取多少條記錄
? */
?public void getDataFromAll(String sql,int startNo,int maxCount){
??Connection conn = ConnectionUtil.getConnection();
??try {
???PreparedStatement pstat = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
???ResultSet rs = pstat.executeQuery();
???rs.first();
???rs.relative(startNo-1);
???int i = startNo-1;
???while(i < startNo + maxCount-1 && !rs.isAfterLast()){
????System.out.println(rs.getInt(1));
????i++;
????rs.next();
???}
??} catch (SQLException e) {
???e.printStackTrace();
??}
?}