Java数据库学习之分页查询

分页查询  limit [start],[rows] 

思路:

 pram start 从哪一行开始 关键是从哪一行开始,需要根据查询的页数来进行换算出查询具体页数是从哪一行开始

start = (pages-1)*rows; 
pages : 具体要查询那一页

rows :   每页查询多少行

pram rows 查询多少行 

总页数需用额外的方法使用SQL语句中的count关键字来计算,并对用户输入的页数进行逻辑判断。

当用户输入页数<=0;从第一页开始 当用户输入页数>=最大页数是 从最大的页数开始 

DEMO1  分页查询的主方法

public List selectByPage(int  startpage, int rows) {
		sql = "select * from tb_user limit ?,?";
		conn = DBUtil.getconn();
		List 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 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 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;
	}
	}

  

 

转载于:https://www.cnblogs.com/klory/p/10623705.html

你可能感兴趣的:(Java数据库学习之分页查询)