`
sunny_hu
  • 浏览: 794 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

我的Oracle分页实现

 
阅读更多
    我的Oralce分页实现,主要使用了三个类一个接口!
    具体代码如下:
    DatabaseConnection.java
   
package com.founder.oraclepagination.dbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 数据库连接类用于连接或销毁数据库对象
 * @author husong
 *
 */
public class DatabaseConnection {
	/**
	 * 数据库连接驱动
	 */
	private static final String DRIVER = "oracle.jdbc.driver.OracleDriver" ;
	/**
	 * 数据库连接URL地址
	 */
	private static final String URL = "jdbc:oracle:thin:@localhost:1521:hsit" ;
	/**
	 * 数据库连接用户名
	 */
	private static final String USERNAME = "scott" ;
	/**
	 * 数据库连接密码
	 */
	private static final String PASSWORD = "tiger" ;
	private Connection conn = null ;
	static{
		try{
			Class.forName(DRIVER) ;
		}catch(ClassNotFoundException e){
			e.printStackTrace() ;
		}
	}
	/**
	 * 获取数据库连接
	 * @return 可用的数据库连接对象
	 */
	public Connection getConnection(){
		try{
			conn = DriverManager.getConnection(URL,USERNAME,PASSWORD) ;
		}catch(SQLException e){
			e.printStackTrace() ;
		}
		return conn ;
	}
	/**
	 * 销毁数据库各种对象
	 * @param 各种数据库对象如Connection Statement ResultSet
	 */
	public void destroy(Object...params){
		if(null==params||params.length<1){
			System.err.println("没有要销毁的对象或要销毁的对象为空");
			System.exit(0);
		}else{
			try{
			for(int i=0;i<params.length;i++){
				Object obj = params[i] ;
				if(obj instanceof ResultSet){
					ResultSet rs = (ResultSet)obj ;
					if(null!=rs)
						rs.close() ;
				}else if(obj instanceof Statement){
					Statement stmt =(Statement)obj ;
					if(null!=stmt)
						stmt.close() ;
				}else if(obj instanceof Connection){
					Connection _conn = (Connection)obj ;
					if(null!=_conn)
						_conn.close() ;
				}else{
					System.err.println("params的类型不匹配,只能为Connection,Statement,ResultSet或其子类");
					System.exit(0) ;
				}
			}
		}catch(Exception e){
			e.printStackTrace() ;
		}
		}
	}
}


Emp.java
package com.founder.oraclepagination.vo;

import java.util.Date;

/**
 * 雇员实体类
 * 
 * @author husong
 * 
 */
public class Emp {
	/**
	 * 雇员编号
	 */
	private int empno;
	/**
	 * 雇员名称
	 */
	private String ename;
	/**
	 * 工种
	 */
	private String job;
	/**
	 * 领导工号
	 */
	private int mgr;
	/**
	 * 入职日期
	 */
	private Date hiredate;
	/**
	 * 薪酬
	 */
	private float sal;
	/**
	 * 奖金
	 */
	private float comm;
	/**
	 * 部门代码
	 */
	private int deptno;

	public int getEmpno() {
		return empno;
	}

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

	public String getEname() {
		return ename;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public int getMgr() {
		return mgr;
	}

	public void setMgr(int mgr) {
		this.mgr = mgr;
	}

	public Date getHiredate() {
		return hiredate;
	}

	public void setHiredate(Date hiredate) {
		this.hiredate = hiredate;
	}

	public float getSal() {
		return sal;
	}

	public void setSal(float sal) {
		this.sal = sal;
	}

	public float getComm() {
		return comm;
	}

	public void setComm(float comm) {
		this.comm = comm;
	}

	public int getDeptno() {
		return deptno;
	}

	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
}



Pagination接口
package com.founder.oraclepagination.pagination;

import java.sql.SQLException;
import java.util.List;

/**
 * 分页接口
 * @author husong
 *
 */
public interface Pagination {
	/**
	 * 获取总记录数
	 * @return 获取到的总记录数
	 * @throws SQLException
	 */
	int getRowCount() throws SQLException;
	/**
	 * 获取总页数
	 * @return  获取到的总页数
	 */
	int getPageCount() ;
	/**
	 * 依据当前页号取得相应的数据
	 * @param 当前页号
	 * @return 当前页号取得相应的数据
	 * @throws SQLException
	 */
	List<Object> getPage(int pageNum) throws SQLException;
}



分页具体实现
package com.founder.oraclepagination.pagination.impl;

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

import com.founder.oraclepagination.dbc.DatabaseConnection;
import com.founder.oraclepagination.pagination.Pagination;
import com.founder.oraclepagination.vo.Emp;
/**
 * 雇员信息分页实现类
 * @author husong
 *
 */
public class EmpPaginationImpl implements Pagination {

	private DatabaseConnection dbc = null ;
	private int pageSize = 5 ;
	public EmpPaginationImpl(){
		this.dbc = new DatabaseConnection() ;
	}
	public void setPageSize(int pageSize){
		if(0>=pageSize){
			this.pageSize = 5 ;
		}else{
			this.pageSize = pageSize ;
		}
	}
	
	public int getPageSize(){
		return this.pageSize ;
	}
	@Override
	public int getRowCount() throws SQLException {
		int count = 0 ;
		Connection conn = null ;
		PreparedStatement pstmt = null ;
		ResultSet rs = null ;
		String sql = "select count(*) as count from emp" ;
		try{
			conn = dbc.getConnection() ;
			pstmt = conn.prepareStatement(sql) ;
			rs = pstmt.executeQuery() ;
			if(null!=rs&&rs.next())
				count = rs.getInt("count") ;
		}catch(SQLException e){
			throw e ;
		}finally{
			dbc.destroy(rs,pstmt,conn) ;
		}
		return count ;
	}

	@Override
	public int getPageCount() {
		int rowCount = 0 ;
		try {
			rowCount = getRowCount();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return (rowCount%pageSize==0)?(rowCount/pageSize):(rowCount/pageSize+1) ;
	}

	@Override
	public List<Object> getPage(int pageNum) throws SQLException {
		List<Object> list = null ;
		String sql = "select * from (select a.*,rownum rn from (select * from emp)a where Rownum<=?) where rn>?" ;
		Connection conn = null ;
		PreparedStatement pstmt = null ;
		ResultSet rs = null ;
		try{
			if(0>=pageNum){
				pageNum = 1 ;
			}else if(pageNum>=getPageCount()){
				pageNum = getPageCount() ;
			}
			conn = dbc.getConnection() ;
			pstmt = conn.prepareStatement(sql) ;
			pstmt.setInt(1, pageSize*pageNum) ;
			pstmt.setInt(2, pageSize*(pageNum-1)) ;
			rs = pstmt.executeQuery() ;
			list = new ArrayList<Object>() ;
			/*System.out.println(pageSize*(pageNum));
			System.out.println(pageSize*(pageNum-1));
			System.out.println(sql);*/
			if(null!=rs){
				while(rs.next()){
					Emp emp = new Emp() ;
					emp.setEmpno(rs.getInt("empno")) ;
					emp.setEname(rs.getString("ename"));
					emp.setJob(rs.getString("job"));
					emp.setMgr(rs.getInt("mgr"));
					emp.setSal(rs.getFloat("sal"));
					emp.setComm(rs.getFloat("comm")) ;
					emp.setHiredate(rs.getDate("hiredate")) ;
					emp.setDeptno(rs.getInt("deptno")) ;
					list.add(emp);
				}
			}
		}catch(SQLException e){
			throw e ;
		}finally{
			dbc.destroy(rs,pstmt,conn) ;
		}
		return list ;
	}

}


测试页
<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>
<%@ page import="com.founder.oraclepagination.vo.*,com.founder.oraclepagination.pagination.*,com.founder.oraclepagination.pagination.impl.*,java.util.*" %>
<%
	String pageNumStr = request.getParameter("pageNum") ;
	int pageNum =1 ;
	List<Object> list = null ;
	Pagination pagination =new EmpPaginationImpl() ;
	if(null==pageNumStr){
		pageNumStr ="1" ;
	}
	try{
		//pageNumStr = request.getParameter("pageNum") ;
		pageNum = Integer.parseInt(pageNumStr) ;
		if(0>=pageNum){
			pageNum=1 ;
		}else if(pageNum>=pagination.getPageCount()){
			pageNum= pagination.getPageCount() ;
		}
	}catch(Exception e){
		pageNum =1 ;
		//e.printStackTrace() ;
	}
	
	list = pagination.getPage(pageNum) ;
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<link rel="stylesheet" href="css/main.css" type="text/css"/>
<title>Employee detail</title>
</head>
<body>
	<div id="container">
		<table>
			<tr>
				<th>雇员编号</th>
				<th>雇员名称</th>
				<th>工种</th>
				<th>主管编号</th>
				<th>部门代码</th>
				<th>入职日期</th>
				<th>薪酬</th>
				<th>佣金</th>
			</tr>
			<%
				if(null!=list){
					for(Object obj:list){
						Emp emp = null ;
						if(obj instanceof Emp){
							emp = (Emp)obj ;
						}	
				
			%>
			<tr>
				<td><%=emp.getEmpno() %></td>
				<td><%=emp.getEname() %></td>
				<td><%=emp.getJob() %></td>
				<td><%=emp.getMgr() %></td>
				<td><%=emp.getDeptno() %></td>
				<td><%=emp.getHiredate() %></td>
				<td><%=emp.getSal() %></td>
				<td><%=emp.getComm() %></td>
			</tr>
			<%
					}
				}
			%>
		</table>
		<p>
			总记录数为<%=pagination.getRowCount() %>,共<%=pagination.getPageCount() %>页,当前第<%=pageNum %>页
			<%
				if(1==pageNum){
					
				
			%>
			<a href="index.jsp?pageNum=<%=pageNum+1 %>">下一页</a>
			<%
				}else if(pageNum==pagination.getPageCount()){
					
				
			%>
			<a href="index.jsp?pageNum=<%= pageNum-1 %>">上一页</a>
			<%
				}else{
			%>
			<a href="index.jsp?pageNum=<%=pageNum+1 %>">下一页</a>
			<a href="index.jsp?pageNum=<%= pageNum-1 %>">上一页</a>
			<%
				}
			%>
		</p>
	</div>
</body>
</html>


本人是初学者,各位有好的意见,请多多指教!谢谢!
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    oracle分页程序的实现

    以下将详细介绍Oracle数据库中实现分页查询的方法以及相关知识点。 在Oracle数据库中,常见的分页查询方法有ROWNUM和ROW_NUMBER()函数,以及使用子查询和连接操作来实现分页。 1. ROWNUM方法: ROWNUM是Oracle中的...

    Oracle分页(limit方式的运用)

    在理解Oracle分页的具体实现之前,我们首先需要明确几个基本的概念: 1. **ROWNUM**:Oracle提供了一个内置的伪列`ROWNUM`,它可以为查询结果集中的每一行返回一个唯一的行号。`ROWNUM`从1开始计数,并且只能用于`...

    Oracle分页实现

    ### Oracle分页实现方法 #### 方法一:使用ROWNUM ROWNUM是Oracle中的一个伪列,它可以为结果集中的每一行分配一个唯一的行号。利用ROWNUM进行分页的基本思想是在内层查询中筛选出所有需要的数据,然后在外层查询...

    ssh+oracle分页

    在“ssh+oracle分页”这个主题中,我们将深入探讨如何利用这三个框架与Oracle数据库进行集成,并实现数据的分页显示。 1. **Struts框架**:Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。...

    如何解决Oracle分页查询中排序与效率问题

    Oracle 分页查询是指在查询结果中,通过限制行数来实现分页的功能。常用的分页查询方法有两种:ROWNUM 和 OFFSET Fetch。ROWNUM 是 Oracle 专门用于分页查询的伪列,OFFSET Fetch 是 Oracle 12c 及更高版本中引入的...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了提高用户体验和系统性能,分页查询显得尤为重要。Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标...

    oracle分页查询sql

    ### Oracle分页查询详解 #### 一、分页查询的重要性 在数据库操作中,分页查询是一项非常重要的技术。尤其当处理大量数据时,一次性获取所有数据不仅会消耗大量的网络带宽,还可能导致前端页面加载缓慢,用户体验...

    Oracle 分页实例 带分页控件用法

    在这个Oracle分页实例中,我们将探讨如何结合分页控件实现数据的分页显示。 首先,我们看到一个名为`webdiyer:AspNetPager`的控件,这是一个ASP.NET的Web分页控件。这个控件包含了几个关键属性: 1. `PageSize`:...

    Oracle&JSP分页和Oracle分页

    总结来说,Oracle和JSP结合实现分页涉及以下几个步骤:在Oracle中构造分页查询,使用JDBC在Servlet中执行查询,然后在JSP页面中展示数据。理解并熟练掌握这些步骤对于开发高效、用户友好的数据驱动网站至关重要。在...

    oracle分页查询

    Oracle 的 ROWNUM 函数可以用来实现分页查询。基本格式如下: ```sql SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM ) WHERE RN &gt;= 21 ``` 这条语句的执行顺序是:...

    ORACLE分页查询效率

    根据所提供的信息,我们可以提炼出以下关于“ORACLE分页查询效率”的相关知识点: ### 一、Oracle中的分页查询 #### 1.1 分页查询的重要性 - **背景介绍**:在实际应用中,数据库查询结果往往非常庞大,一次性加载...

    oracle 分页完整代码

    在这个Java和Oracle结合的分页实现中,我们将探讨如何通过Java后端配合Oracle数据库进行有效的分页处理。 首先,Oracle提供了一种名为ROWNUM的伪列,它可以用来对查询结果进行排序和限制。在执行分页查询时,我们...

    oracle 分页类文件

    本文件包包含了一系列用于实现Oracle数据库分页查询的类,帮助开发者解决分页问题。 首先,`StringUtil.java`文件很可能包含了字符串操作的相关工具方法,这些方法在处理SQL语句时非常实用,特别是构建分页查询的...

    Oracle All 添加 修改 更新 Oracle分页 emp表 存储过程实现

    在这个场景中,我们将深入探讨如何在Oracle中针对emp表实现分页查询的存储过程。 首先,让我们了解什么是分页查询。在大数据量的表格中,一次性加载所有数据可能会对系统性能造成压力,因此通常我们会采用分页的...

    oracle分页查询并返回总记录数据存储过程

    Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种高效且灵活的方式。本文将详细介绍如何在 Oracle 中创建一个用于分页查询并返回总记录数的存储过程。 #### 核心概念 1. **存储过程**:存储在...

    使用jdbc_oracle实现的分页功能

    本示例着重讲解如何利用JDBC和Oracle数据库实现分页功能,同时涵盖一个表的基本操作:增加、删除和修改。 首先,我们需要了解JDBC。JDBC是Java API,它提供了一套标准接口,使得Java程序可以与各种类型的数据库进行...

    mysql、sqlserver、oracle分页,java分页统一接口实现

    MySQL、SQL Server、Oracle 分页及 Java 分页统一接口实现 MySQL、SQL Server、Oracle 分页是关系数据库管理系统中最基本也是最常用的操作之一,而 Java 分页统一接口实现则是对数据库操作的抽象和封装。本文将对 ...

    spring mvc实现Oracle分页

    本项目着重讲解如何在Spring MVC环境中,结合JDBC技术,实现对Oracle数据库的分页查询功能,并通过Ajax进行动态加载,提升用户体验。此外,我们还将涉及LigerUI和jEditable两个前端库,以增强用户界面和交互性。 ...

    java实现oracle分页策略

    总之,Java实现Oracle分页策略涉及到数据库查询设计、Java DAO接口的实现以及前端页面的展示。通过合理的分页策略,我们可以有效管理和展示大量的数据库记录,同时提升应用的性能和用户体验。在实际编程中,应根据...

Global site tag (gtag.js) - Google Analytics