分頁查詢 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;
}
}
