JSP+Oracle 实现分页

本文介绍了一种使用Oracle数据库进行分页查询的方法,并通过具体的Java实现步骤详细展示了如何获取每页数据及总页数,包括实体类定义、分页Bean封装、业务逻辑处理以及页面展示等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、oracle来实现分页的sql语句如下分析:

--每页显示6条数据
select * from emp where rownum<=6;

--总个数
select count(1) from emp;


--第1页
select * from (select e.*, rownum r from emp  e where rownum<=6*1)
where r>(1-1)*6


--第2页
select * from (select e.*, rownum r from emp  e where rownum<=6*2)
where r>(2-1)*6

--第3页
select * from (select e.*, rownum r from emp  e where rownum<=6*3)
where r>(3-1)*6

--第4页
select * from (select e.*, rownum r from emp  e where rownum<=6*4)
where r>(4-1)*6

二、具体实现步骤如下:

1、封装数据Bean

/**
 * 实体类
 * @author Administrator
 *
 */
public class Emp {
	// shift+ctrl+Y 小写
	// shift+ctrl+X 大写
	private int empno;
	private String ename;
	private String job;
	private int mgr;
	private Date hiredate;
	private double sal;
	private double comm;
	private int deptno;

	public int getEmpno() {
		return empno;
	}

	public void setEmpno(int empno) {
		this.empno = empno;
	}.......}

2、封装分页Bean

package com.hlx.entity;
/**
 * 分页Bean
 * @author Administrator
 *
 */
public class PageInfo {
	private int pageSize=6; // 每页显示的个数
	private int pageCount; // 总个数
	private int pageTotal; // 总页数
	private int pageCurrent; // 当前页

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageCount() {
		return pageCount;
	}

	/**
	 * 设置总个数,计算出总页数
	 * @param pageCount
	 */
	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
		// 计算总页数
		this.pageTotal = (pageCount%pageSize==0)?(pageCount/pageSize):(pageCount/pageSize+1);
	}

	public int getPageTotal() {
		return pageTotal;
	}



	public int getPageCurrent() {
		return pageCurrent;
	}

	public void setPageCurrent(int pageCurrent) {
		this.pageCurrent = pageCurrent;
	}

}

3、封装业务Bean

/**
 * 底层数据继承基类(BaseDao)
 * 
 * @author Administrator
 * 
 */
public class EmpDao extends BaseDao {

	// 声明对象
	private String sql = "";
	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;

	private CallableStatement cs;

	

	/**
	 * --(1)总个数 select count(1) from emp;
	 * 
	 * @return
	 */
	public int getCount() {
		sql = "select count(1) from emp";

		// 1)获得连接
		con = this.getConnection();

		// 2)获得ps对象
		try {
			ps = con.prepareStatement(sql);

			// 3)执行
			rs = ps.executeQuery();

			// 4)光标往下移
			rs.next();

			// 5)获得值
			return rs.getInt(1);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			this.closeAll(rs, ps, con); // 关闭
		}

		return 0;
	}

	/**
	 * /** --(2)返回具体的数据(每页) select * from (select e.*, rownum r from emp e where
	 * rownum<=6*2) where r>(2-1)*6
	 * 
	 * @param pageSize
	 *            每页显示个数
	 * @param pageCurrent
	 *            当前页
	 * @return 返回集合
	 */
	public List<Emp> getPageInfo(int pageSize, int pageCurrent) {

		// 存放结果
		List<Emp> lists = new ArrayList<Emp>();

		sql = " select * from (select e.*, rownum r from emp  e where rownum<="
				+ pageCurrent + "*" + pageSize + ") where r>(" + pageCurrent
				+ "-1)*" + pageSize + "";

		// 1)获得连接
		con = this.getConnection();

		// 2)获得ps对象
		try {
			ps = con.prepareStatement(sql);

			// 3)执行
			rs = ps.executeQuery();

			// 4)遍历数据
			while (rs.next()) {
				// 封装对象
				Emp emp = new Emp(rs.getInt(1), rs.getString(2),
						rs.getString(3), rs.getInt(4), rs.getDate(5),
						rs.getDouble(6), rs.getDouble(7), rs.getInt(8));

				// 存入集合中
				lists.add(emp);
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			this.closeAll(rs, ps, con); // 关闭
		}

		return lists;
	}
	}

4、页面来实现分页

<table border="1" width="738" height="65">
		<tbody>
			<tr>
				<td> 编号</td>
				<td> 姓名</td>
				<td> 工种</td>
				<td> 上司</td>
				<td> 日期</td>
				<td> 工资</td>
				<td> 奖金</td>
				<td> 部门编号</td>
			</tr>

			<jsp:useBean id="dao" class="com.hlx.dao.EmpDao"></jsp:useBean>
			<jsp:useBean id="pageInfo" class="com.hlx.entity.PageInfo"></jsp:useBean>


			<%
				  //获得总个数
				   int count = dao.getCount();
				   
				   //获得当前页//////////////////////////
				   String pageIndex=request.getParameter("pageIndex");
				   //判断
				   int pageCurrent = (pageIndex==null)?(1):(Integer.parseInt(pageIndex));
				   /////////////////////////////////////
				   
				   //每页显示的个数
				   int pageSize = 6;
				   
				   
				   //计算出总页数
				   pageInfo.setPageCount(count);
				   
				   
				   //调用方法
				   List<Emp> lists = dao.getPageInfo(pageSize, pageCurrent);
				   
				   for(Emp emp :lists){
			%>


			<tr>
				<td><%=emp.getEmpno()%></td>
				<td><%=emp.getEname()%></td>
				<td><%=emp.getJob()%></td>
				<td><%=emp.getMgr()%></td>
				<td><%=emp.getHiredate()%></td>
				<td><%=emp.getSal()%></td>
				<td><%=emp.getComm()%></td>
				<td><%=emp.getDeptno()%></td>
			</tr>


			<%
				}
			%>
		</tbody>
	</table>
	第<%=pageCurrent%>/<%=pageInfo.getPageTotal()%>页
	<%
		if(pageCurrent>1){
	%>
	<a href="index.jsp?pageIndex=1">首页</a>
	<a href="index.jsp?pageIndex=<%=pageCurrent-1%>">上一页</a>
	<%
		}
	%>

	<%
		if(pageCurrent<pageInfo.getPageTotal()){
	%>
	<a href="index.jsp?pageIndex=<%=pageCurrent+1%>">下一页</a>
	<a href="index.jsp?pageIndex=<%=pageInfo.getPageTotal()%>">末页</a>

	<%
		}
	%>


	<p />
	<%
		for(int i=1;i<=pageInfo.getPageTotal(); i++){
	%>

	<a href="index.jsp?pageIndex=<%=i%>"><%=i%>  </a>

	<%
		}
	%>

	<p />
	<select id="number" onchange="fun(this.value)">
		<%
			for(int i=1;i<=pageInfo.getPageTotal(); i++){
		%>
		<option value="<%=i%>"><%=i%></option>

		<%
			}
		%>
	</select>
</body>
</html>


三、总结

     用三种不同的形式完成了分页(JSP+Oracle)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值