Java數據庫學習之分頁查詢


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM