`
lms168
  • 浏览: 61540 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

jsp调用oracle存储过程分页

 
阅读更多
首先看下在oracle中一般的分页代码

select * from emp;   --分页代码分解式第一步

select e.*,rownum rn from (select * from emp)e;--分页代码分解式第二步

select e.*,rownum rn from (select * from emp)e where rownum<10; ;--分页代码分解式第第三步


select * from (select e.*,rownum rn from (select * from emp)e where rownum<10) where rn>6;  --最终的分页代码




然后看下oracle存储过程中的通用分页代码的写法
--由于返回值一个是集合,所以不能用一般的参数,必须先创建一个packageg,里面包含游标类型
--第一步创建一个package
create or replace package fengyepackage as
type fengye_cursor is ref cursor;   --创建游标类型变量fengye_cursor
end fengyepackage;

--第二步创建一个procedure
create or replace  procedure sp_fengye(pageNow in number,pageSise in number,tableName in varchar2,sortOrder in varchar2,pageCount out number,fengye_cursor out fengyepackage.fengye_cursor) is
v_rowCount number(2);  --总记录数目
v_pageCount number(2); --总页数
v_fromline number(2);  --从第v_fromline行开始获取返回值
v_toline number(2);    --到v_toline number行结束
v_sql  varchar2(1000); --装载sql语句的变量
begin
v_sql:='select count(*) from '||tableName;  --组织一个sql
execute immediate v_sql into v_rowCount;   --执行sql,并且把返回值赋给v_rowCount
if  mod(v_rowCount,pageSise)=0 then      --用v_rowCount%pageSise=0的取余数的方式是错误的,这是java代码里面的用法
v_pageCount:=v_rowCount/pageSise;
else
v_pageCount:=ceil(v_rowCount/pageSise);  --ceil相当于加了1
end if;
v_toline:=pageNow*pageSise;
v_fromline:=(pageNow-1)*pageSise;
pageCount:=v_pageCount;
v_sql:='select * from (select e.*,rownum rn from (select * from '||tableName||' '||sortOrder||')e where rownum<='||v_toline||') where rn>'||v_fromline;--两个连接符号之间要用空格隔开,否则java程序无法识别
open fengye_cursor for v_sql;
--close fengye_cursor;  --关闭游标,但是现在不能关闭否则java程序调用不到数据
--把游标的结果集传给JAVA的resultset之是不需要我们来手动的关闭游标的,因为JAVA把这个结果集接收过来的之后,如果JAVA对这个结果集操作完毕的话,JAVA会把这个结果集关闭掉的,不需要我们手动的去作任何操作!
end;





相关的东西已经准备好了,现在看下在jsp中如何调用这个存储过程,如果使用mvc结构可以把相关代码提到业务逻辑层,这里为了方便展示就直接写在一起了
<%@ page language="java" import="java.sql.*,java.util.*" pageEncoding="gbk"%>
<%@page import="oracle.jdbc.OracleTypes"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String pageNowStr=request.getParameter("pageNow");       //当前是第几页
int pageNow=1;
if(pageNowStr!=null){
  pageNow=Integer.valueOf(pageNowStr); 
}
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  <table border="1">

    <%//这些代码可以移到业务逻辑成
		Connection conn=null;
		CallableStatement cs=null;
		ResultSet result=null;
		int pageCount=0;
       try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		int pageSize=3;       //每页多少条记录
		         		
		
		try {
		    String sql="{call sp_fengye(?,?,?,?,?,?)}";
		    cs=conn.prepareCall(sql);
		    cs.setInt(1,pageNow);        //注册当前页数
		    cs.setInt(2,pageSize);       //注册每页多少条记录
		    cs.setString(3,"dept");      //注册要查询的表
		    cs.setString(4,"order by deptno desc");  //注册排序条件
		    cs.registerOutParameter(5,oracle.jdbc.OracleTypes.NUMBER);    //注册返回值,总共分了多少页
	        cs.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);    //注册返回值,当前页的所有记录
		    cs.execute();
		    pageCount=cs.getInt(5);    //获取总共分了多少条记录
		  //  System.out.println("pageCount"+pageCount);
			result=(ResultSet)cs.getObject(6);
			while(result.next()){      //循环取出当前页的记录
				out.print("<tr><td>"+result.getInt(1)+"</td><td>"+ result.getString(2)+"</td></tr>");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
		         
				result.close();
				
				cs.close();
				conn.close();
		}
     %>
</table>
          <%
            if(pageNow!=1){     
              out.print("<a href=oracleProcedureFengye.jsp?pageNow="+(pageNow-1)+">上一页</a>&nbsp;&nbsp;&nbsp;");
              }
            for(int i=pageNow;i<pageNow+3;i++){  
              if(i<=pageCount)      //使其不超过总页数
               out.print("<a href=oracleProcedureFengye.jsp?pageNow="+i+">"+i+"</a>&nbsp;&nbsp;&nbsp;");
      
            }  
             if(pageNow<pageCount)  
             out.print("<a href=oracleProcedureFengye.jsp?pageNow="+(pageNow+1)+">下一页</a>");
           %>


 <br>
  </body>
</html>


运行结果如下


  • 大小: 1.7 KB
分享到:
评论
1 楼 aa00aa00 2013-04-28  
例子通俗易懂,我已经成功运行起来了

相关推荐

    毕业设计-源码Java调用Oracle存储过程实现分页功能

    在这个毕业设计项目中,我们主要探讨的是如何使用Java语言调用Oracle数据库的存储过程来实现分页功能,这在Web应用程序中非常常见,尤其是在处理大数据量时,为了提高用户体验,分页是一种有效的数据展示方式。...

    java oracle数据库过程实现jsp分页

    以下是一个使用JDBC调用Oracle存储过程的示例: ```java CallableStatement cs = connection.prepareCall("{call page_pkg.get_paged_data(?,?,?)}"); cs.setInt(1, pageNum); // 设置页码 cs.setInt(2, pageSize);...

    JSP+JDBC_真分页(基于Oracle数据库分页).

    本主题聚焦于使用JSP和JDBC在Oracle数据库上实现真正的分页功能。在Web开发中,分页是提高用户体验的关键技术,尤其是在处理大量数据时,它能让用户更有效地浏览和查找所需信息。这里我们将深入探讨如何结合Java ...

    jsp + oracle分页简单实用

    ### JSP与Oracle数据库分页显示技术解析 #### 一、概述 本文档介绍了一种基于JSP(Java Server Pages)结合Oracle数据库实现的数据分页显示方法。此方法利用了JDBC(Java Database Connectivity)2.0标准进行...

    jsp+JavaBean+Servlet_Oracle和Mysql分页

    项目中的"pagination_4_Oracle"可能包含了Oracle分页的具体实现。 5. MySQL数据库分页:MySQL提供了LIMIT关键字,可以直接配合OFFSET实现分页查询。在Java中,通过调整LIMIT子句的参数即可实现不同页码的数据获取。...

    jsp中数据库在页面分页的实现

    本主题将深入探讨如何在JSP中利用数据库实现页面分页,并涉及存储过程、Servlet以及Oracle和MySQL数据库的分页策略。 首先,我们要理解JSP(JavaServer Pages)是一种基于Java的动态网页技术,它可以嵌入Java代码来...

    分页struts2+jsp+oracle10G

    在本项目中,我们主要探讨的是一个基于Struts2、JSP和Oracle 10g数据库的分页实现。这是一个适合初级开发者学习的实例,它展示了如何在实际应用中进行数据分页显示,同时保证了代码质量,所有的逻辑代码都是手写的,...

    jsp数据分页源代码

    它可能包含一个自定义的JSP标签库(Tag Library),开发者可以通过在页面中引入这个库,然后调用特定的分页标签来实现分页功能。 6. **分页工具的使用**: 分页工具可能包含以下关键组件: - 分页参数:如当前...

    SSH+ORACLE好用分页

    5. **展示视图**:在JSP或FreeMarker等视图层,根据返回的分页数据渲染页面,展示每一页的内容,同时提供导航链接,让用户可以浏览其他页。 在Oracle数据库中,可以使用内置的SQL分页函数,如ROWNUM或ROW_NUMBER()...

    JSP连接ORACLE

    本项目以"JSP连接ORACLE"为主题,意味着它展示了如何使用JSP与Oracle数据库进行通信,以便存储、检索或更新数据。Oracle数据库是企业级的数据库管理系统,广泛应用于各种规模的组织。 首先,要建立JSP与Oracle的...

    ssh+oracle分页

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

    毕业设计jsp+Sturts+hibernate的添删改查以及分页!采用Oracle数据库

    在这个新闻管理系统中,Oracle存储所有的新闻记录,并通过Hibernate提供的API进行数据操作。开发者需要编写合适的SQL查询和DDL语句,以建立适合应用需求的数据库结构。 综上所述,这个毕业设计项目是一个典型的Java...

    jsp+jdbc_oracle增删改查过滤分页排序

    本教程"jsp+jdbc_oracle增删改查过滤分页排序"旨在帮助初学者掌握如何利用JSP与Oracle数据库进行数据操作,包括增、删、改、查以及查询结果的过滤、分页和排序。 首先,我们需要理解JDBC(Java Database ...

    oracle实现分页

    在Servlet中,我们可以处理HTTP请求,接收参数(如当前页数、每页大小),并调用服务方法获取分页数据,然后将结果传递给JSP页面进行渲染。 在JSP页面上,使用EL(Expression Language)和JSTL(JavaServer Pages ...

    JSP+Oracle留言板

    4. Servlet或JavaBeans处理:创建一个Servlet或JavaBean,接收JSP页面传递的数据,进行必要的验证和处理,然后调用Oracle的SQL接口进行数据的存储。 5. 显示结果:`display_messages.jsp`通过执行SQL查询从数据库中...

    JSP+Oracle动态网站开发案例精选(三、十)

    最后,通过JSP调用Oracle的存储过程,可以封装复杂的业务逻辑或数据库操作,提升性能。 在学习这两个章节的过程中,你将了解到如何设计和实现用户交互界面,如何处理用户输入,以及如何高效安全地与Oracle数据库...

    jsp MVC 分页.pdf

    这里,`doGet()`方法接收用户请求,调用`PageBean`和`ContactBean`处理分页逻辑,然后将数据存储到session,并重定向至JSP页面。 #### 五、结论 通过以上分析,我们可以看到,在MVC架构中,JSP与Servlet协同工作...

    SSI整合,有ibatis连接oracle的分页,ajax等技术

    "Ibatis连接Oracle的分页"是指利用Ibatis作为数据访问层,与Oracle数据库进行交互,并实现了分页查询功能。Oracle数据库支持多种分页方式,如ROWNUM伪列、ROWNUM配合子查询、ROW_NUMBER()窗口函数等。在这个项目中,...

    jsp+hibernate实现的分页,java代码

    在分页场景中,`jsp`通常用于接收用户的请求参数(如当前页码),并调用后台服务来获取对应的数据。 `Hibernate`则是一个强大的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过`Hibernate`,...

    oracle数据库表的分页

    在Oracle数据库中,分页查询是一项非常常见的操作,特别是在处理大量数据时,为了提高用户体验,我们通常会将数据分批加载,这就是所谓的“分页”。Java作为一种常用的后端开发语言,提供了多种方式来实现对Oracle...

Global site tag (gtag.js) - Google Analytics