JDBC分頁查詢的簡單實現

JDBC 分頁查詢源碼

/**
     * 分頁查詢
     *
     * @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

image-20191115210553113.png
該運行結果的Table來自於Oracle的EMP表,整張表請參考用簡單的例子解釋Oracle分頁查詢 - - SegmentFault 思否數據庫

SEE ALSO編程

JDBC編程 - 獲取Connection及常見問題 - - SegmentFault 思否segmentfault

相關文章
相關標籤/搜索