JSP+Oracle 实现分页

一、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" οnchange="fun(this.value)">
		<%
			for(int i=1;i<=pageInfo.getPageTotal(); i++){
		%>
		<option value="<%=i%>"><%=i%></option>

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


三、总结

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<%-- 作者:何志强[hhzqq@21cn.com] 日期:2000-08-03 版本:1.0 功能:JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle --%> <%@ page contentType="text/html;charset=8859_1" %> <% //变量声明 java.sql.Connection sqlCon; //数据库连接对象 java.sql.Statement sqlStmt; //SQL语句对象 java.sql.ResultSet sqlRst; //结果集对象 java.lang.String strCon; //数据库连接字符串 java.lang.String strSQL; //SQL语句 int intPageSize; //一页显示的记录数 int intRowCount; //记录总数 int intPageCount; //总页数 int intPage; //待显示页码 java.lang.String strPage; int i; //设置一页显示的记录数 intPageSize = 2; //取得待显示页码 strPage = request.getParameter("page"); if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据 intPage = 1; } else{//将字符串转换成整型 intPage = java.lang.Integer.parseInt(strPage); if(intPage<1) intPage = 1; } //装载JDBC驱动程序 java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //设置数据库连接字符串 strCon = "jdbc:oracle:thin:@linux:1521:ora4cweb"; //连接数据库 sqlCon = java.sql.DriverManager.getConnection(strCon,"hzq","hzq"); //创建一个可以滚动的只读的SQL语句对象 sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY); //准备SQL语句 strSQL = "select name,age from test"; //执行SQL语句并获取结果集 sqlRst = sqlStmt.executeQuery(strSQL); //获取记录总数 sqlRst.last(); intRowCount = sqlRst.getRow(); //记算总页数 intPageCount = (intRowCount+intPageSize-1) / intPageSize; //调整待显示的页码 if(intPage>intPageCount) intPage = intPageCount; %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle</title> </head> <body> <table border="1" cellspacing="0" cellpadding="0"> <tr> <th>姓名</th> <th>年龄</th> </tr> <% if(intPageCount>0){ //将记录指针定位到待显示页的第一条记录上 sqlRst.absolute((intPage-1) * intPageSize + 1); //显示数据 i = 0; while(i<intPageSize && !sqlRst.isAfterLast()){ %> <tr> <td><%=sqlRst.getString(1)%></td> <td><%=sqlRst.getString(2)%></td> </tr> <% sqlRst.next(); i++; } } %> </table> 第<%=intPage%>页 共<%=intPageCount%>页 <%if(intPage<intPageCount){%><a href="jdbc20-oracle.jsp?page=<%=intPage+1%>">下一页</a><%}%> <%if(intPage>1){%><a href="jdbc20-oracle.jsp?page=<%=intPage-1%>">上一页</a><%}%> </body> </html> <% //关闭结果集 sqlRst.close(); //关闭SQL语句对象 sqlStmt.close(); //关闭数据库 sqlCon.close(); %>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值