DBUtils例子2_實現分頁查詢
阿新 • • 發佈:2018-11-23
需求:針對於從資料庫查詢的多條資料,展示在一個頁面上 分頁數展示
作用:提高使用者的體驗度
如:
[上一頁]1 2 3 4 5 6 7[下一頁] 第幾頁/共幾頁
mysql資料庫分頁: Selec ... from xxx limit n,m (n是查詢的索引,m查詢幾個) 第一頁:limit 0 3 第二頁:limit 3 3 第三頁:limit 6 3 第n頁: (當前頁-1)*m ,m 分頁需要的資料: 1.頁面展示的內容 select * from product limit (當前頁-1)*m ,m 2.每頁顯示的條數 自己規定 3.當前頁 從前臺傳遞過去 4.總條數 select count(*) from product 5.總頁數 等於 總條數/每頁顯示的條數 向上取整 後臺實現: 封裝為PageBean 1.List data; //頁面展示的內容 select * from product limit n,m 2.int pageSize; //每頁顯示的條數 自己規定 3.int pageNumber //當前頁 從前臺傳遞過去 4.int total //總條數 select count(*) from product 5.int pageTotal //總頁數 (int)Math.ceil(total*1.0/pageSize)
例子:使用PageBean實現分頁查詢
分頁顯示emp表員工姓名的ename和行號,每頁顯示5個,預設顯示第一頁。
最後一行顯示當前頁,總頁數。
使用者輸入n,顯示下一頁的資料,如果已經是最後一頁,提示使用者“已經是最後一頁”。
輸入p,顯示上一頁的資料,如果是第一頁,,提示使用者“已經是第一頁”。
如果
介面示例:
1 zs1
2 ls1
3 ww1
4 zs2
5 ls2
第1頁 共3頁
輸入n,顯示下一頁的資料,輸入p,顯示上一頁的資料
注意:分頁查詢的兩個注意要點:
第一,獲取總頁數的方法:
public int getPageCount() { return (int) Math.ceil(total*1.0/pageSize); }
第二,limit的前一個引數,不是第幾個頁面,而是前面已經顯示的資訊條數:
所以,前一個引數應該是
(page.getPageNum() - 1) * page.getPageSize()
//(當前頁-1)*(頁面顯示條數)
package cn.njit.entity; public class Emp { private String empno; private String ename; private String job; private String mgr; private float sal; private String deptno; public String getEmpno() { return empno; } public void setEmpno(String empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getMgr() { return mgr; } public void setMgr(String mgr) { this.mgr = mgr; } public float getSal() { return sal; } public void setSal(float sal) { this.sal = sal; } public String getDeptno() { return deptno; } public void setDeptno(String deptno) { this.deptno = deptno; } public String toString() { return empno+"\t"+ename+"\t"+sal; } } ----------------------------------------------------------------------------- package cn.njit.entity; import java.util.List; public class PageBean<T> { private List<T> data; private int pageSize;//每頁顯示的條數 private int total;//當前查詢條件下的總記錄條數 private int pageNumber;//顯示哪一頁 public int getPageCount() { return (int) Math.ceil(total*1.0/pageSize); } public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public int getPageNumber() { return pageNumber; } public void setPageNumber(int pageNumber) { this.pageNumber = pageNumber; } } ------------------------------------------------------------------ package cn.njit.entity; import java.sql.SQLException; import java.util.List; import java.util.Scanner; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import util.C3P0Utils; public class TestFenye { public static void main(String[] args) { PageBean<Emp> page = new PageBean<Emp>(); int count = 0; page.setPageNumber(1 + count); page.setPageSize(5); testPageBean(page); Scanner sc = new Scanner(System.in); String str = sc.next(); boolean tip = true; while (tip) { if (str.equals("n")) { if (1 + count >= page.getPageCount()) { count = page.getPageCount() - 1; System.out.println("已經在最後一頁"); } else { count++; } } else if (str.equals("p")) { if (1 + count <= 1) { count = 0; System.out.println("已經在第一頁"); } else { count--; } } else { System.out.println("請重新輸入"); } page.setPageNumber(1 + count); page.setPageSize(5); testPageBean(page); str = sc.next(); } } static void testPageBean(PageBean<Emp> page) { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); ScalarHandler<Long> sch = new ScalarHandler<Long>(); String str = "select count(1) from emp"; try { Long cnt = qr.query(str, sch); page.setTotal(cnt.intValue()); } catch (SQLException e) { e.printStackTrace(); } String sql = "select * from emp limit ?,?;"; int pageSize = page.getPageSize(); int begin = (page.getPageNumber() - 1) * pageSize; Object[] o = { begin, pageSize }; BeanListHandler<Emp> bhs = new BeanListHandler<Emp>(Emp.class); try { List<Emp> list = qr.query(sql, bhs, o); page.setData(list); } catch (SQLException e) { e.printStackTrace(); } int count = 0; for (Object e : page.getData()) { count++; System.out.println(count + "\t" + e.toString()); } System.out.println("第" + page.getPageNumber() + "頁;共" + page.getPageCount() + "頁。"); System.out.println("輸入n顯示下一頁,p返回上一頁"); } }