0
点赞
收藏
分享

微信扫一扫

javaWeb的分页

彪悍的鼹鼠 2022-04-13 阅读 39
java

 伪列-rownum

Oracle 数据库表对象自动创建

表示每一行记录的行号

使用三层嵌套方式编写SQL

最内层:查询所有记录

中间层:通过 rownum 的限定查询数量的上限

最外层:通过 rownum 的限定查询数量的下限

分页方法代码如下(在dao方法里):

公式:(pageIndex-1)*pageSize+1---pageIdex*pageSize

/**
	 * 分页的第一版
	 * @param pageIndex  第几页
	 * @return  新闻的集合
	 */
	public List<News>getAll(int pageIndex){
		List<News> ls=new ArrayList<News>();
		int pageSize=5;
		int a=(pageIndex-1)*pageSize+1;
		int b=pageIndex*pageSize;
		try {
			con=DBHper.getcon();//创建连接
			String sql="select * from(\r\n" + 
					"select a.nid,a.ntitle,a.nauthor,rownum as rid from news279 a order by nid desc\r\n" + 
					") b where b.rid between ? and ?";//定义sql语句
			ps=con.prepareStatement(sql);//获得执行对象
			//给占位符赋值
			ps.setInt(1, a);
			ps.setInt(2,b);
			rs=ps.executeQuery();//获得结果集
			//遍历结果集
			while(rs.next()) {
				//实例化一个新闻对象
				News n=new News();
				//给对象赋值 set
				n.setNid(rs.getInt(1));
				n.setNtitle(rs.getString(2));
				n.setNauthor(rs.getString(3));
				//加到集合中 ***
				ls.add(n);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHper.myClose(con, ps, rs);
		}
		return ls;
	}
	
   
	 /**
	  * 分页的第二版 
	  * @param pageIndex  第几页=当前页码
	  * @param pageSize   每页多少条记录
	  * @return  新闻的集合
	  */
	public List<News>getAll(int pageIndex,int pageSize){
		List<News> ls=new ArrayList<News>();
		//公式   找规律
		int a=(pageIndex-1)*pageSize+1;
		int b=pageIndex*pageSize;
		try {
			con=DBHper.getcon();//创建连接
			String sql="select * from (\r\n" + 
					"select a.*,rownum as rid from(\r\n" + 
					"select nid,ntitle,nauthor from news279 order by nid desc\r\n" + 
					")a\r\n" + 
					")b where b.rid between ? and ?";//定义sql语句
			ps=con.prepareStatement(sql);//获得执行对象
			//给占位符赋值
			ps.setInt(1, a);
			ps.setInt(2,b);
			rs=ps.executeQuery();//获得结果集
			//遍历结果集
			while(rs.next()) {
				//实例化一个新闻对象
				News n=new News();
				//给对象赋值 set
				n.setNid(rs.getInt(1));
				n.setNtitle(rs.getString(2));
				n.setNauthor(rs.getString(3));
				//加到集合中 ***
				ls.add(n);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHper.myClose(con, ps, rs);
		}
		return ls;
	}
	
	/**
	 * 获取总行数
	 * @param str 表名
	 * @return  行数
	 */
	public int getRows(String str) {
		int  n=0;
		try {
			con=DBHper.getcon();
			String sql="select count(*) from "+str;
			ps=con.prepareStatement(sql);
			rs=ps.executeQuery();
			if(rs.next()) {
				n=rs.getInt(1);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHper.myClose(con, ps, rs);
		}
		
		return n;
	}
	/**
	 * 带模糊查询的分页(根据标题)
	 * @param pageIndex 第几页
	 * @param pageSize  每页多少条数据
	 * @param title  标题的关键字
	 * @return 新闻的集合
	 */
	
	public List<News>getAll(int pageIndex,int pageSize,String title){
		List<News> ls=new ArrayList<News>();
		//公式   找规律
		int a=(pageIndex-1)*pageSize+1;
		int b=pageIndex*pageSize;
		try {
			con=DBHper.getcon();//创建连接
			String sql="select * from (\r\n" + 
					"select a.*,rownum as rid from(\r\n" + 
					"select nid,ntitle,nauthor from news279 where ntitle like '%"+title+"%' order by nid desc\r\n" + 
					")a\r\n" + 
					")b where b.rid between ? and ?";//定义sql语句
			ps=con.prepareStatement(sql);//获得执行对象
			//给占位符赋值
			ps.setInt(1, a);
			ps.setInt(2,b);
			rs=ps.executeQuery();//获得结果集
			//遍历结果集
			while(rs.next()) {
				//实例化一个新闻对象
				News n=new News();
				//给对象赋值 set
				n.setNid(rs.getInt(1));
				n.setNtitle(rs.getString(2));
				n.setNauthor(rs.getString(3));
				//加到集合中 ***
				ls.add(n);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHper.myClose(con, ps, rs);
		}
		return ls;
	}
	

然后我们在其他页面调用dao方法:

//调用方法
    	NewsDao nd=new NewsDao();
        int pageIndex=1;//页码
        int pageSize=5;//每页多少记录
        //接收pid
        String pid=request.getParameter("pid");
        if(pid!=null){//说明点击了"首页"、上一页、下一页或者尾页
        	pageIndex=Integer.parseInt(pid);//改变页码
        	
        }
        //计算最大页码
        //拿到总行数
        int rows=nd.getRows("news279 where ntitle like '%"+title+"%'");
        int max=rows/pageSize;
        if(rows%pageSize!=0){//除不进=有余数
        	max++;
        }
        
        /*
        分析:
        1.拿到总行数
        2.计算页码 
        3特殊情况  除不进就加1
        */
        
        List<News>ls=nd.getAll(pageIndex, pageSize, title);		

分页设置的实现

根据已确认的当前页,设置上页和下页

根据总页数设置首页和末页(这里是运用到了三元运算符)

              当前页数:[<%=pageIndex%>/<%=max%>]&nbsp; 

  <a href="admin.jsp?pid=1&title=<%=title%>">首页</a>        
      <a href="admin.jsp?pid=<%=pageIndex>1?pageIndex-1:1%>&title=<%=title%>">上一页</a>
      <a href="admin.jsp?pid=<%=pageIndex<max?pageIndex+1:max%>&title=<%=title%>">下一页</a> 
      <a href="admin.jsp?pid=<%=max%>&title=<%=title%>">末页</a> </p>

举报

相关推荐

javaWEB(分页)

javaWeb(分页)

JavaWEB(AJAX实现分页)

JavaWeb(AJAX实现分页)

JavaWeb09(分页)

javaWeb_08(分页)

Javaweb09(分页)

javaweb-23(AJAX实现分页)

0 条评论