`

JAVA 调用包中的存储过程(分页)

 
阅读更多

这个分页的存储过程是转自互联网:

http://kingmxj.javaeye.com/blog/438267

create or replace package package_page as
type cursor_page is ref cursor;
Procedure proc_page(
p_tablename varchar2, --表名emp e
p_tablecolumn varchar2, --查询列e.id,e.ename,e.job
p_order varchar2, --排序e.ename desc
p_pagesize Number, --每页大小
p_curpage Number, --当前页
p_where varchar2, --查询条件e.ename like '%S%'
p_rowcount out Number, --总条数,输出参数
p_pagecount out number, --总页数
p_cursor out cursor_page); --结果集
end package_page;
/

CREATE OR REPLACE Package Body package_page
Is
--存储过程
Procedure proc_page(
p_tablename varchar2, --表名emp e
p_tablecolumn varchar2, --查询列e.id,e.ename,e.job
p_order varchar2, --排序e.ename desc
p_pagesize Number, --每页大小
p_curpage Number, --当前页
p_where varchar2, --查询条件e.ename like '%S%'
p_rowcount out Number, --总条数,输出参数
p_pagecount out number, --总页数
p_cursor out cursor_page --结果集
)
is
v_count_sql varchar2(2000);
v_select_sql varchar2(2000);
begin
--查询总条数
v_count_sql:='select count(*) from '||p_tablename;
--连接查询条件(''也属于is null)
if p_where is not null then
v_count_sql:=v_count_sql||' where '||p_where;
end if;
--执行查询,查询总条数
execute immediate v_count_sql into p_rowcount;

--dbms_output.put_line('查询总条数SQL=>'||v_count_sql);
--dbms_output.put_line('查询总条数Count='||p_rowcount);

--得到总页数
if mod(p_rowcount,p_pagesize)=0 then
p_pagecount:=p_rowcount/p_pagesize;
else
p_pagecount:=p_rowcount/p_pagesize+1;
end if;

--如果查询记录大于0则查询结果集
if p_rowcount>0 and p_curpage>=1 and p_curpage<=p_pagecount then

--查询所有(只有一页)
if p_rowcount<=p_pagesize then
v_select_sql:='select '||p_tablecolumn||' from '||p_tablename;
if p_where is not null then
v_select_sql:=v_select_sql||' where '||p_where;
end if;
if p_order is not null then
v_select_sql:=v_select_sql||' order by '||p_order;
end if;
elsif p_curpage=1 then --查询第一页
v_select_sql:='select '||p_tablecolumn||' from '||p_tablename;
if p_where is not null then
v_select_sql:=v_select_sql||' where '||p_where||' and rownum<='||p_pagesize;
else
v_select_sql:=v_select_sql||' where rownum<='||p_pagesize;
end if;
if p_order is not null then
v_select_sql:=v_select_sql||' order by '||p_order;
end if;
else --查询指定页
v_select_sql:='select * from (select '|| p_tablename || '.' || p_tablecolumn ||',rownum row_num from '|| p_tablename;
if p_where is not null then
v_select_sql:=v_select_sql||' where '||p_where;
end if;
if p_order is not null then
v_select_sql:=v_select_sql||' order by '||p_order;
end if;
v_select_sql:=v_select_sql||') where row_num>'||((p_curpage-1)*p_pagesize)||' and row_num<='||(p_curpage*p_pagesize);
end if;
--执行查询
--dbms_output.put_line('查询语句=>'||v_select_sql);
open p_cursor for v_select_sql;
else
--dbms_output.put_line('查询语句=>'||'select * from '||p_tablename||' where 1!=1');
open p_cursor for 'select * from '||p_tablename||' where 1!=1';
end if;

end proc_page;
end package_page;
/

这里需要用到ojdbc14.jar包中的类: oracle.jdbc.driver.OracleTypes;

存储过程可以通用,显示数据可以根据自己需要定义对应的Bean

分享到:
评论

相关推荐

    oracle 存储过程 用于分页

    本文将详细介绍如何利用Oracle数据库中的存储过程来实现自动分页功能,并通过Java程序调用这些存储过程。 #### 存储过程设计 为了实现分页功能,我们需要创建一个名为`page`的包,该包中包含了一个存储过程`p_...

    oracle分页查询

    本主题将详细介绍Oracle中的分页查询,并结合Java和ASP.NET如何调用存储过程进行示例。 首先,Oracle的分页查询主要依赖于`ROWNUM`伪列,它可以用来限制返回的结果集数量。基本的分页查询语法如下: ```sql SELECT...

    反射泛型完美版分页.rar

    通过java.lang.reflect包中的类(如Class、Method、Constructor等),我们可以获取类的信息,包括类名、字段、方法、构造器等,并能动态调用方法或访问字段。这种能力使得代码更具动态性和灵活性,尤其是在框架和库...

    java之jdbc总结

    总结,Java的JDBC提供了与数据库交互的标准接口,通过理解并熟练掌握JDBC的基本操作流程、注意事项、预处理语句以及存储过程的调用,能够更安全、高效地实现数据库操作。同时,了解分页技术有助于在大量数据时提高...

    Java Map 集合类简介

    在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别是ArrayList,基于动态数组...

    Java程序员面试题搜集

    Java程序员在面试过程中可能会遇到各种各样的问题,这些题目涵盖了Java语言的基础、框架、网络协议以及数据结构等多个方面。以下是对这些知识点的详细解释: 1. **Hibernate中的离线查询去除重复项**: Hibernate ...

    java工程师面试题

    在Java中,可以使用`java.io`包中的`FileInputStream`和`FileOutputStream`类来完成文件的复制。通过读取源文件的数据并写入目标文件,实现文件内容的迁移。 4. Servlet的创建过程与生命周期: - Servlet由Web...

    Util包分页标签、各种时间的操作方法、设置字符编码、数据类型转换、用户权限过滤

    在IT行业中,工具类是程序员日常开发中必不可少的一...在`Util`包中,这些功能通常被封装成静态方法,便于开发者调用,降低了代码的复杂性。在编写代码时,合理地利用工具类,可以使我们的代码更简洁、高效且易于维护。

    java面试大全

    在Java中,可以使用 `java.io` 包中的 `InputStream` 和 `OutputStream` 类来实现文件复制。基本步骤包括打开源文件和目标文件的输入输出流,然后读取源文件并写入目标文件,最后关闭流。 4. **Servlet的创建过程...

    30个java常用的工具类.rar

    1. **日期处理工具类**:Java中的日期和时间处理往往涉及到`java.util.Date`、`java.time`包中的类。工具类可能提供了格式化日期、解析日期、计算日期差等方法,如`DateUtil`,可以简化对日期的操作。 2. **文件...

    java技术点

    9. **存储过程**:CallableStatement调用数据库存储过程。 10. **下拉列表组件**:HTML,CSS,JavaScript实现。 11. **请求范围共享**:ServletContext,HttpServletRequest,HttpServletResponse。 12. **文件上传...

    300+道中高级java工程师面试题大全含答案文档下载

    3. **文件复制程序**:在Java中,可以使用`java.io`包中的`FileInputStream`和`FileOutputStream`来实现文件的复制。通过读取源文件的数据并写入目标文件,可以完成文件的复制操作。 4. **Servlet的创建过程及生命...

    JAVA面试常见问题大全及解答

    18. **堆和栈**:堆存储动态分配的对象,栈存储局部变量和方法调用信息。 19. **EJB分类**:Stateless Session Bean、Stateful Session Bean、Entity Bean等,各有应用场景。 20. **软件业看法**:讨论行业趋势、...

    java jdbc 初级

    - **使用集合存储表中的数据**:通过Java集合(如`List`)存储从数据库查询得到的结果,每个元素对应一条记录,使用自定义的`ValueObject`(值对象)表示每条记录。 - **ValueObject**:一个简单的Java类,用于封装...

    JAVA面试题全集

    - 获取当前日期和时间的年月日、小时分秒:使用 `java.util.Calendar` 或 `java.time` 包中的类。 - 获取从1970年到现在的毫秒数:使用 `System.currentTimeMillis()`。 - 获取某个日期是否是当月的最后一天:...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置...

    java范例开发大全

    第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java...

    java面试笔试题用到的

    - **获取年月日、小时分秒**:可以使用`java.util.Calendar`或`java.time`包中的类(如`LocalDate`, `LocalTime`等)。 - **获取从1970年到现在的毫秒数**:使用`System.currentTimeMillis()`。 - **获取某日期是...

    Java范例开发大全 (源程序)

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7...

    JAVA笔试题,面试题(吐血推荐)

    `String`不是基本数据类型,而是一个类,位于`java.lang`包中。基本数据类型直接存储值,而`String`对象存储的是指向含有该值的一个对象的引用。 2. **字符串的操作**: - 字符串反转:可以通过将字符串转化为...

Global site tag (gtag.js) - Google Analytics