分頁查詢 limit [start],[rows]
思路:
pram start 從哪一行開始 關鍵是從哪一行開始,需要根據查詢的頁數來進行換算出查詢具體頁數是從哪一行開始
start = (pages-1)*rows;
pages : 具體要查詢那一頁
rows : 每頁查詢多少行
pram rows 查詢多少行
總頁數需用額外的方法使用SQL語句中的count關鍵字來計算,並對用戶輸入的頁數進行邏輯判斷。
當用戶輸入頁數<=0;從第一頁開始 當用戶輸入頁數>=最大頁數是 從最大的頁數開始
DEMO1 分頁查詢的主方法
public List<User> selectByPage(int startpage, int rows) { sql = "select * from tb_user limit ?,?"; conn = DBUtil.getconn(); List<User> list = new ArrayList<>(); User user = null; try { PreparedStatement ps = conn.prepareStatement(sql); int start = (startpage-1)*rows; ps.setInt(1, start); ps.setInt(2, rows); ResultSet rs = ps.executeQuery(); while(rs.next()) { user = new User(rs.getString("pass"), rs.getInt("uage"), rs.getString("uname"), rs.getString("birthday"), rs.getBigDecimal("sal"), null); list.add(user); } } catch (SQLException e) { e.printStackTrace(); }finally { DBUtil.closeResources(conn, ps, null); } return list; }
DEMO2 計算可查詢最大頁數的方法
/** * * @param rows 為每次查詢時需顯示的行數 * @return countpages返回的是可查的最大頁數 */ @Override public int countmaxpages(int rows) { // 計算查詢表的最大頁數 int countpages = 0; sql = "select count(*) from tb_user"; conn = DBUtil.getconn(); try { ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery();//結果集存儲的是查詢后的表的內容, // 如果只查詢一個字段,則查詢后的返回的結果集只有一個字段 if(rs.next()) { int lines = rs.getInt(1); countpages = (lines%rows==0)?(lines/rows):(lines/rows+1); } } catch (SQLException e) { e.printStackTrace(); } return countpages; }
DEMO3 代碼優化,需要對用戶輸入的頁數進行合法性判斷。
@Override public Map<String, Object> selectByPage(int startpage, int rows) { // 對用戶輸入的頁數合法性進行判斷 // 如果用戶輸入的頁數<=0,或用戶的輸入查詢的行數>總行數。則設置默認從第一頁開始顯示 if(startpage<=0||rows>userDao.countmaxpages(rows)) { startpage = 1; } // 如果用戶的輸入查詢的行數>最大頁數(根據用戶輸入的查詢行數和總可查詢行數確定)。則設置默認從最后一頁開始顯示 if(startpage>userDao.countmaxpages(rows)) { startpage = userDao.countmaxpages(rows); } List<User> list = new ArrayList<>(); list = userDao.selectByPage(startpage, rows); if(list.size()==0) { map.put("code",600); map.put("msg","分頁查詢失敗"); return map; }else { map.put("code",200); map.put("msg","分頁查詢成功"); list.forEach(user1->{ System.out.println(user1); }); return map; } }