Javaweb09 分页

了解分页思路

①在数据较多时,页面显示不完整需要用户拖动页面才能浏览更多信息,考虑到用户友好性,我们可以使用分页来完善;分页的优点:数据能够按照指定格式显示,布局清晰,且不受信息数量的限制

②实现分页显示步骤:1.确定每页显示的数据

                                    2.计算显示页数

                                    3.编写SQL语句

③拿到分页页数:1.获取总行数

                             2.根据每页显示的行数和总行数计算

                             3.eclipse内关键代码

package com.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.entity.News;
import com.util.DBHelper;

/**
 * 新闻dao方法
 * @author Administrator
 *
 */
public class NewsDao {

	//扩大作用域 三兄弟
	private Connection con=null;
	private PreparedStatement ps=null;
	private ResultSet rs=null;
	
	/**
	 * 查询全部 新闻id 标题 作者
	 * @return 新闻的集合
	 */
	public List<News> getAll(){
		List<News> ls=new ArrayList<News>();
		try {
			 //创建连接
	      	 con=DBHelper.getCon();
	      	 //定义sql语句
	      	 String sql="select nid,ntitle,nauthor from news_xw order by nid desc";
	      	 //out.print(sql);
	      	 //获得执行对象
	      	 ps=con.prepareStatement(sql);
	      	 //获得结果集
	      	 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;
	}
	
	/**
	 * 分页第一版
	 * @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=DBHelper.getCon();
	      	 //定义sql语句
	      	 String sql="select * from(\r\n" + 
	      	 		"       select a.nid,a.ntitle,a.nauthor as rid from news_xw a\r\n" + 
	      	 		") b where b.rid between ? and ?\r\n" + 
	      	 		"";
	      	 //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;
	}
	
	/**
	 * 分页第二版
	 * @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 from(\r\n" + 
	      	 		"         select nid,ntitle,nauthor from news_xw 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;
	}
	
	/**
	 * 获取总行数
	 * @param str 表名等
	 * @return 行数
	 */
	public int getRows(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;
	}
	
	/**
	 * 带模糊查询的分页  根据标题查询
	 * @param pageIndex 第几页
	 * @param pageSize 每页多少条记录
	 * @param title 关键字
	 * @return 新闻集合
	 */
	public List<News> getpage(int pageIndex,int pageSize,String title){
		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 from(\r\n" + 
	      	 		"         select nid,ntitle,nauthor from news_xw where ntitle like '%"+title+"%' 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;
	}
	
	
}

④分页SQL语句:1、伪列-rownum

1.1由Oracle数据库表对象自动创建

1.2表示每一行记录的行号

2、使用三层嵌套方式编写SQL

2.1最内层:查询所有记录

2.2中间层:通过rownum的限定擦护心数量的上限

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

⑤获取当前页:1. 获取当前页显示的页码

                          2.如果获取的页码为null,则设置当前页为首页

                           3.如果获取的页码不为null,则该页码即为当前页页码

	 
      	 NewsDao nd=new NewsDao();
      	 int pageIndex=1;//当前页
      	 int pageSize=5;
      	 //接收pid
      	 String pid=request.getParameter("pid");
      	 if(pid!=null){//说明点击了上一页或者下一页等
      		 pageIndex=Integer.parseInt(pid);//改变pageIndex的值
      	  }
      	 //计算最大页码
      	 int rows=nd.getRows("news_xw where ntitle like '%"+title+"%'");

⑥设置上下首末页:1.根据已确认的当前页,设置上页和下页

                                 2.根据总页数设置首页和末页

     //接收pid
      	 String pid=request.getParameter("pid");
      	 if(pid!=null){//说明点击了上一页或者下一页等
      		 pageIndex=Integer.parseInt(pid);//改变pageIndex的值
      	 }
      	 //计算最大页码
      	 int rows=nd.getRows("news_xw where ntitle like '%"+title+"%'");
 
     //对首页与末页进行控制  使用三元运算符
         <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%>">末页</a> </p>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值