/** * 分頁查詢 * * @param sql 分頁查詢語句 * @param page 頁數(最小爲1) * @param pageSize 分頁大小 */ public void pageQuery(String sql,int pageSize, int page) { Connection conn = null; Statement st = null; ResultSet rs = null; RowSetFactory factory = null; try { // 獲取數據庫的鏈接 conn = JdbcUtils.getConnection(); // 設置RS遊標移動類型 st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs = st.executeQuery(sql); // 結果集元數據信息對象 ResultSetMetaData metaData = rs.getMetaData(); // 建立能夠產生CachedRowSet的工廠 factory = RowSetProvider.newFactory(); CachedRowSet cachedRs = factory.createCachedRowSet(); // 最關聯的兩句 // 設置每頁的大小 cachedRs.setPageSize(pageSize); // 第一個參數:將Rs中query到的結果集輸入到cachedRs中 // 第二個參數:從第(page - 1) * pageSize + 1行開始抓取結果集,一次抓取一頁 cachedRs.populate(rs,(page - 1) * pageSize + 1); // 打印列名 for (int i = 0; i < metaData.getColumnCount(); i++) { System.out.print(metaData.getColumnName(i + 1) + "\t"); } System.out.println(); // 對分頁的結果集進行處理 while (cachedRs.next()) { for (int i = 0; i < metaData.getColumnCount(); i++) { System.out.print(cachedRs.getString(i + 1) + "\t"); } System.out.println(); } rs.close(); st.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } finally { // 釋放與JDBC有關的資源 JdbcUtils.release(conn,st,null,rs); } }
測試類java
package deptmgr.test; import deptmgr.dao.BaseDao; /** * @author mmengyiyu * @date 2019/11/15 21:00 */ public class BaseDaoTest { public static void main(String[] args) { BaseDao baseDao = new BaseDao(); baseDao.pageQuery("select * from EMP",5,2); } }
運行結果sql
該運行結果的Table來自於Oracle的EMP表,整張表請參考用簡單的例子解釋Oracle分頁查詢 - - SegmentFault 思否數據庫
SEE ALSO編程
JDBC編程 - 獲取Connection及常見問題 - - SegmentFault 思否segmentfault