zoukankan      html  css  js  c++  java
  • 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;
    	}
    	}
    

      

  • 相关阅读:
    边工作边刷题:70天一遍leetcode: day 58-1
    边工作边刷题:70天一遍leetcode: day 58
    边工作边刷题:70天一遍leetcode: day 59
    边工作边刷题:70天一遍leetcode: day 90
    边工作边刷题:70天一遍leetcode: day 60-2
    边工作边刷题:70天一遍leetcode: day 60-1
    边工作边刷题:70天一遍leetcode: day 60
    边工作边刷题:70天一遍leetcode: day 61-7
    边工作边刷题:70天一遍leetcode: day 61-6
    边工作边刷题:70天一遍leetcode: day 61-5
  • 原文地址:https://www.cnblogs.com/klory/p/10623705.html
Copyright © 2011-2022 走看看