分页
这边我们实现一个简单的分页
首先就是要找到我们分页的sql语句
--以emp表为例
--假设每页5条记录
--取第一页
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所以找规律可以得到万能公式
(pageIndex-1)*pageSize+1------pageIndex*pageSize
--先编号 后排序 select * from( select 这个位置放要查找的内容 rownum as rid from news280 a order by nid desc ) b where b.rid between 1 and 5
先用dao方法封装一下
public List<Xw> getYk(int pageIndex,int pageSize){ List<Xw> ls=new ArrayList<Xw>(); int a=(pageIndex-1)*pageSize+1; int b=pageIndex*pageSize; try { //创造连接 con=DBHelper.getCon(); //定义SQL语句 String sql="\r\n" + "select * from(\r\n" + " select a.*,rownum as rid from(\r\n" + " select 要查找的内容 from news280 \r\n" + " ) a\r\n" + ") b where b.rid between ? and ?"; //获得执行对象 PreparedStatement ps=con.prepareStatement(sql); //给站位符赋值 ps.setInt(1, a); ps.setInt(2, b); //获得结果集 ResultSet rs=ps.executeQuery(); //循环遍历 while(rs.next()){ //实例化新闻对象 Xw a1=new Xw(); //给对象赋值 a1.setNid(rs.getInt(1)); a1.setNtitle(rs.getString(2)); a1.setNaddtime(rs.getString(3)); //加到集合中 ls.add(a1); } } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.myClose(con, ps, rs); } return ls; }
在这之后我们需要获得总页数,以便来给我们的末页做判断
SQL语句
select count(*) from 要查询的表名
用dao方法封装
/** * 总行数 * @return */ public int getRow() { int n=0; try { con=DBHelper.getCon(); String sql="select count(*) from 要查询的表名"; ps=con.prepareStatement(sql); rs=ps.executeQuery(); if(rs.next()) { n=rs.getInt(1); } } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.myClose(con, ps, null); } return n; }
然后我们调用方法
NewsDao nd=new NewsDao(); int pageIndex=1;//当前页面 int pageSize=3; //接收pid String pid=request.getParameter("pid"); if(pid!=null){ pageIndex=Integer.parseInt(pid); } //计算最大页码 int row=nd.getRow(); int max=row/pageSize; if(row%pageSize!=0){ max++; } List<Xw> ls=nd.getYk(pageIndex, pageSize); for(Xw sss:ls){ %> <li> <a href='/s6/news/read.jsp?nid=<%=sss.getNid() %>'><%=sss.getNtitle() %> </a> <span><%=sss.getNaddtime() %></span> </li> <li class='space'></li> <% } %>
然后我们看一下底层代码
<p align="right"> 当前页数:[<%=pageIndex %>/<%=max %>] <a href="yk.jsp?pid=1">首页</a> <a href="yk.jsp?pid=<%=pageIndex>1?pageIndex-1:1 %>">上一页</a> <a href="yk.jsp?pid=<%=pageIndex<max?pageIndex+1:max%>">下一页</a> <a href="yk.jsp?pid=<%=max %>">末页</a> </p>