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