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

各位看官好,今天我们来认识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

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
熟悉项目开发过程中SSM框架、JSP、Mysql使用,知道各技术之间的如何衔接; 考虑到部分学生只需要学习前台(买家)或是后台(后台),故将电商系统分为电商系统前台和电商系统后台两个项目, 当前课程包含电商系统前台和电商系统后台 该课程主要涉及到的技术有:  项目涉及的技术:  1、前端:jsp、css、javascript、jQuery(js框架)、bootstrap框架 2、后台:Spring MVC、Spring、Mybatis框架、javaMail进行邮件发送、jstl 、jstl自定义分页标签、代码生成器等 3、数据库:Mysql 4、服务器:Tomcat项目开发涉及的功能: 1、项目以及数据库搭建 2、用户登录、退出3、用户注册、邮件发送、以及用户信息激活4、首页商品信息页面搭建以及查询功能实现5、查询商品明细6、加入商品至购物车、删除、更新、清除购物车商品信息7、确认订单信息8、订单页面搭建以及下订单功能实现9、查询我的购物车以及订单信息10、商品明细查看,商品修改,商品下架11、商品类型管理12、订单管理13、代码机器人使用等等其他实战项目:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771 java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008 java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007 JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543 JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572 JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721 JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610 java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770 java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989 系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941 Java Web入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

歐陽。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值