各位看官好,今天我们来认识JSP项目如何让使界面的数据展示出分页效果

目录

一、分页

A、思路

B、Java Dao方法

Ba、分页代码

Bb、计算总行数

C、JSP界面代码

Ca、设置每页对多显示的数据

Cb、点击上一页/下一页/首页/尾页 实现分页效果 

D、效果图


一、分页

A、思路

--伪列:rownum 不能作用于大于符号以及between..and 把伪列-->明列(实列)=取别名 

-以emp表为例
--假设每页5条记录
--取第一页 

SQL语句:
select * from(
       select a.*,rownum as rid from emp a where ename like '%A%'
) b where b.rid between 6 and 10

--取pageIndex页 假设pageSize=5
当pageIndex=1:1-5
当pageIndex=2:6-10
当pageIndex=3:11-15

--10/5=2
--15/5=3
--13/5=2 除不尽 +1

(pageIndex-1)*pageSize+1------pageIndex*pageSize

B、Java Dao方法

Ba、分页代码

     /**
     * 先排序后编号
	 * @param pageIndex  第几页 
	 * @param pageSize  每页多少数据
	 * @return  新闻的集合
	 */
	public List<News> getPage(int pageIndex,int pageSize){
		List<News> ls=new ArrayList<News>();
		int a=(pageIndex-1)*pageSize+1;
		int b=pageIndex*pageSize;
		try {
			//创建连接
			con=DBHelper.getCon();
		    //定义sql语句
		    String sql="select * from(\r\n" + 
		    		"  select a.*,rownum as rid from(\r\n" + 
		    		"         select nid,ntitle,nauthor from news280 order by nid desc\r\n" + 
		    		"  ) a\r\n" + 
		    		") b where b.rid between ? and ?";
		    //out.print(sql);
		    //获得执行对象
		    ps=con.prepareStatement(sql);
		    //给占位符赋值
		    ps.setInt(1, a);
		    ps.setInt(2, b);
		    //获得结果集
		    rs=ps.executeQuery();
		    //循环遍历
		    while(rs.next()){
		    	//实例化新闻对象
		    	News n=new News();
		    	//给对象赋值
		    	n.setNid(rs.getInt(1));
		    	n.setNtitle(rs.getString(2));
		    	n.setNauthor(rs.getString(3));
		    	//加到集合中
		    	ls.add(n);
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		return ls;
	}

Bb、计算总行数

	/**
	 * 获取总行数
	 * @param str 表名等
	 * @return 行数
	 */
	public int getRow(String str) {
		int n=0;
		try {
			con=DBHelper.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 {
			DBHelper.myClose(con, ps, rs);
		}
		return n;
	}

C、JSP界面代码

    <%
    request.setCharacterEncoding("utf-8");
    //接收title option
    String option=request.getParameter("option");
    String title=request.getParameter("title");
    if(title==null){ 
    	title="";//相当于查询全部
    	
    }
    if(option==null){
    	option="ntitle";
    }
    INewsDao nd=new NewsDao();
    int pageIndex=1;//当前页码 第几页
    int pageSize=3;//设置每页最多显示的数据
    //接收pid
    String pid=request.getParameter("pid");
    if(pid!=null){//说明点击了上一页或者下一页等
    	pageIndex=Integer.parseInt(pid);//改变pageIndex的值
    } 
    //计算最大页码
    int rows=nd.getRow("news280 where "+option+" like '%"+title+"%'");
    int max=rows/pageSize;//取整
    if(rows%pageSize!=0){//如果除不尽 有余数
    	max++; 
    }
    if(max==0){
    	max=1;
    }
	
    //调用查模糊询的方法
   List<News> ls= nd.getPage(pageIndex, pageSize);
    //循环遍历
	    for(News n:ls){//n:新闻对象
			    //循环遍历
			    %>
			      <li><a href='/s4/news/read.jsp?nid=<%=n.getNid() %>'><%=n.getNtitle() %></a>
			      <span> 作者:<%=n.getNauthor()%>&#160;&#160;&#160;&#160;
			       <a href='/s4/news/update.jsp?nid=<%=n.getNid()%>'>修改</a> &#160;&#160;&#160;&#160; 
			       <a href='/s4/news/dodelete.jsp?nid=<%=n.getNid() %>' onclick='return clickdel()'>删除</a> 
			       </span> 
			       </li>
			     <%
	  	  }
     %>
      <li class='space'></li>
      <p align="right"> 
                 当前页数:[<%=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>
    </ul>

Ca、设置每页对多显示的数据

    int pageIndex=1;//当前页码 第几页
    int pageSize=3;//设置每页最多显示的数据

Cb、点击上一页/下一页/首页/尾页 实现分页效果 

 <p align="right"> 
      当前页数:[<%=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> 

 界面代码里都有哦

D、效果图

  OK,以上所有就是今日学习的所有内容了,我是小陽,欢迎个位看官能观看我的文章,如果有写的不好/不足的地方欢迎大家指出来,博主会做出改变,如对各位有所帮助,不介意各位留下免费的三连哦!

下期文章知识:ckeditor&smartupload

更多推荐

Java Web快速入门之 页面数据分页