分頁查詢,sql分頁查詢

來源:互聯網
上載者:User

分頁查詢,sql分頁查詢
    分頁查詢其實和其他的沒什麼區別,主要區別在一個地方,就是查詢語句不通,分頁查詢可能比較麻煩一點,下面來說一下該如何?我們的分頁查詢功能:

一、代碼展示    1、封裝分頁實體PageModel,儲存一些分頁查詢的基本資料

    /**     * 封裝分頁資訊     */</span>    public class PageModel {        //結果集</span>        private List list;        //查詢記錄數</span>        private int totalRecords;        //每頁多少條資料</span>        private int pageSize;        //第幾頁</span>        private int pageNo;                //總頁數</span>        public int getTotalPages(){                return (totalRecords+pageSize-1)/pageSize;        }        //取得首頁</span>        public int getTopPageNo(){            return 1;        }        //取得尾頁</span>        public int getButtomPageNo(){            return getTotalPages();        }        //上一頁</span>        public int getPreviousPageNo(){            if (pageNo<=1){                return 1;            }            return pageNo-1;        }                //下一頁</span>        public int getNextPageNo(){            if (pageNo>= getTotalPages()){                return getTotalPages();            }            return pageNo+1;        }                public List getList() {            return list;        }        public void setList(List list) {            this.list = list;        }        public int getTotalRecords() {            return totalRecords;        }        public void setTotalRecords(int totalRecords) {            this.totalRecords = totalRecords;        }        public int getPageSize() {            return pageSize;        }        public void setPageSize(int pageSize) {            this.pageSize = pageSize;        }        public int getPageNo() {            return pageNo;        }        public void setPageNo(int pageNo) {            this.pageNo = pageNo;        }    }    </span>
  2、編寫分頁查詢方法
/**     * 分頁查詢     * @param pageNo 第幾頁     * @param pageSize 每頁多少條資料     * @return pageMode     */    public PageModel findUserList(int pageNo,int pageSize){        //利用StringBuffer存放分頁查詢語句         StringBuffer sbSql=new StringBuffer();        sbSql.append("select user_id,user_name,password,contract_tel,email,create_date ")            .append("from ")            .append("( ")            .append("select ROWNUM rn,user_id,user_name,password,contract_tel,email,create_date ")            .append("from")            .append("( ")            .append("select * from T_USER where USER_ID<>'root' ORDER BY USER_ID ")            .append(") where ROWNUM <= ? ")            .append(") where rn > ? ");         //建立Connection對象和PreparedStatement對象        Connection conn=null;        PreparedStatement pstmt=null;         //建立ResultSet存放查詢結果        ResultSet rs=null;        PageModel pageModel=null;        try{              //擷取串連            conn=DbUtil.getConnection();            pstmt=conn.prepareStatement(sbSql.toString());              //設定參數            pstmt.setInt(1, pageNo * pageSize);            pstmt.setInt(2, (pageNo-1)*pageSize);                        rs=pstmt.executeQuery();            List userList=new ArrayList();                               //處理查詢結果            while (rs.next()){                User user=new User();                user.setUserId(rs.getString("USER_ID"));                user.setUserName(rs.getString("USER_NAME"));                user.setPassword(rs.getString("PASSWORD"));                user.setContactTel(rs.getString("CONTRACT_TEL"));                user.setEmail(rs.getString("EMAIL"));                user.setCreateDate(rs.getTimestamp("CREATE_DATE"));                userList.add(user);            }            pageModel=new PageModel();            pageModel.setList(userList);            pageModel.setTotalRecords(getTotalRecords(conn));            pageModel.setPageSize(pageSize);            pageModel.setPageNo(pageNo);        }catch (SQLException e) {            e.printStackTrace();        }finally{            DbUtil.close(rs);            DbUtil.close(pstmt);            DbUtil.close(conn);        }         //返回分頁查詢結果pageModel        return pageModel;    }    public int getTotalRecords(Connection conn) throws SQLException {        String sql="select count(*) from t_user where user_id <> 'root'";        PreparedStatement pstmt=null;        ResultSet rs=null;        int count=0;        try{            pstmt=conn.prepareStatement(sql);            rs=pstmt.executeQuery();            rs.next();            count=rs.getInt(1);        }finally{            DbUtil.close(rs);            DbUtil.close(pstmt);        }        return count;    }  

二、功能分析        綜合上面的東西,其實分頁查詢本質上就是一個查詢語句的事:
       《第三部分表3--開始》         select user_id,user_name,password,contract_tel,email,create_date from
(      《第二部分表2--開始》select ROWNUM rn,user_id,user_name,password,contract_tel,email,create_date from(        《第一部分表1---開始》
select * from T_USER where USER_ID<>'root' ORDER BY USER_ID                《第一部分表1---結束》)where ROWNUM <=  (pageNo * pageSize)   《第二部分表2--結束》) where rn >  (pageNo-1)*pageSize《第三部分表3--結束》
    
三、總結:由上面可知,分頁查詢其實就是表的巢狀查詢,第一步:先將要查詢的內容查出來,如第一部分;第二步:在去掉大於最大記錄的那部分記錄,如第二部分;第三步:在將小於最小記錄的那部分去掉,如第三部分。掐頭去尾,剩下的正好是我們所需要的分頁查詢資料。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.