`
LowKeyFeng
  • 浏览: 54932 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java调用Oracle数据库的分页存储过程

 
阅读更多

首先先贴出来Oracle的分页分页存储过程代码吧。

1.这是包的代码

create or replace package DB_Oper is

-- Author : LIUBING
-- Created : 2009-10-28 15:01:30
-- Purpose : 测试Oracle的分页存储过程

-- Public type declarations
type ref_DataSet is REF CURSOR;


-- Public function and procedure declarations
function GetCount(mTableName varchar2, mTerm varchar2) return number;
procedure return_DataSet(
mTableName in varchar2, --表名
mTerm in varchar2, --条件
mPageSize in number, --每页显示记录数
mPageIndex in number, --当前页
mOrderField in varchar2, --排序字段
mOrderStyle in number, --排序方式 0 升序 1 降序
mTotalRecords out number, --总记录数
mDateSet out ref_DataSet --记录
);

end DB_Oper;

2.这是包体的代码

create or replace package body DB_Oper is

----- 获取记录数 ------
function GetCount(mTableName varchar2, mTerm varchar2) return number is
i number;
vSql varchar2(1000);
begin
i := 0;
vSql := 'select count(*) from ' || mTableName ;

if length(mTerm) > 0 then
vSql := vSql || ' where ' || mTerm;
end if;

execute IMMEDIATE vSql into i;

return(i);
end;

----- 数据分页 ----------
procedure return_DataSet(
mTableName in varchar2, --表名
mTerm in varchar2, --条件
mPageSize in number, --每页显示记录数
mPageIndex in number, --当前页
mOrderField in varchar2, --排序字段
mOrderStyle in number, --排序方式 0 升序 1 降序
mTotalRecords out number, --总记录数
mDateSet out ref_DataSet --记录集
) is
begin
declare
Invalid_Input Exception;
vSql varchar2(1000);
Start_page number;
End_page number;
n_PageIndex number;
n_PageSize number;
--mTotalRecords number;
begin
mTotalRecords := GetCount(trim(mTableName), trim(mTerm));
vSql := 'select * from ' || mTableName;
if length(trim(mTerm)) > 0 then
vSql := vSql || ' where ' || trim(mTerm) ;
end if;
if length(trim(mOrderField)) > 0 then
begin
vSql := vSql || ' order by ' || trim(mOrderField);
if morderStyle > 0 then
vSql := vSql || ' desc ';
end if;
end;
end if;

--
n_PageSize := mPageSize;
if mPageSize <= 0 then
n_PageSize := 10;
end if;
n_PageIndex := mPageIndex;
if mPageIndex <= 0 then
n_PageIndex := 1;
end if;
if mTotalRecords > 0 and n_PageIndex > 1 then
begin
--如果n_pageindex大于实际的页数,则取实际页数
if n_PageIndex > round((mTotalRecords / n_PageSize) + 0.5) then
n_PageIndex := round((mTotalRecords / n_PageSize) + 0.5);
end if;
end;
end if;
Start_page := (n_PageIndex - 1) * n_PageSize + 1;
End_page := n_PageIndex * n_PageSize;
vSql := 'SELECT * FROM (SELECT A.*, rownum r FROM ( ' || vSql || ' ) A WHERE rownum <= ' || End_page || ' ) B WHERE r >= '|| Start_page;

Open mDateSet for vSql;

exception
When Invalid_Input Then
open mDateSet for select null from dual;
end;
end return_DataSet;
end DB_Oper;

3.这是Java的测试代码

 

Java代码 复制代码
  1. public class ConnToOracle {   
  2.     final static Logger logger = Logger.getLogger(ConnToOracle.class);   
  3.     public static Connection getConnection(String url, String userName, String password) {   
  4.         Connection conn = null;   
  5.         try {   
  6.             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());   
  7.             conn = DriverManager.getConnection(url, userName, password);   
  8.             System.out.println("Connection Starting.......");   
  9.         }  catch (SQLException e) {   
  10.             logger.error("Connection error......");   
  11.         }   
  12.         return conn;   
  13.     }   
  14.     public static void select() throws Exception {   
  15.         Connection conn = null;   
  16.         try {   
  17.             conn = getConnection("jdbc:oracle:thin:@192.168.6.80:1521:C2SServer""d1xn_cmc","d1xn_cmc");   
  18. //          String call= "{call DB_Oper.return_DataSet(?,?,?,?,?,?,?,?)}";这种条用方式也是OK的   
  19.             String call= "begin DB_Oper.return_DataSet(?,?,?,?,?,?,?,?);end;";   
  20.             CallableStatement proc = conn.prepareCall(call);   
  21.             proc.setString(1"game_goods");   
  22.             proc.setString(2null);   
  23.             proc.setString(3"20");   
  24.             proc.setString(4"1");   
  25.             proc.setString(5"n_ID");   
  26.             proc.setString(6"0");   
  27.             proc.registerOutParameter(7, OracleTypes.NUMBER);//注册返回的总记录数的数据类型   
  28.             proc.registerOutParameter(8, OracleTypes.CURSOR);//注册返回的数据结果集的数据类型   
  29.             proc.execute();   
  30.             int a1 = proc.getInt(7);//获得总的记录集   
  31.             System.out.println(a1);   
  32.             ResultSet rs = (ResultSet)proc.getObject(8);//获得返回的数据集   
  33.             while (rs.next()) {   
  34.                 System.out.println(rs.getString(1));   
  35.             }   
  36.         } catch (SQLException e) {   
  37.             e.printStackTrace();   
  38.         } finally {   
  39.             if (conn != null) {   
  40.                 conn.close();   
  41.             }   
  42.         }   
  43.     }   
  44. }  

 

 

 

 

 

转载:http://boy00fly.iteye.com/blog/1110656

分享到:
评论

相关推荐

    自学oracle存储过程

    目录 Oracle 存储过程....................................................Oracle 高效分页存储过程实例..................................................................................................... 17

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    Java面试题31.jdbc调用存储过程 Java面试题32.简单说一下你对jdbc的理解 Java面试题33.写一个jdbc的访问oracle的列子 Java面试题34.jdbc中preparedStatement比Statement的好处 Java面试题35.数据库连接池的作用 Java...

    JDBC 3.0数据库开发与设计

    4.2 调用存储过程对象 4.2.1 CallableStatement对象的创建 4.2.2 IN、OUT及INOUT参数的使用 4.2.3 执行CallableStatement Object对象 4.2.4 CallableStatement对象使用实例 4.2.5 SQL Server存储过程编程经验...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题31.jdbc调用存储过程.mp4 │ Java面试题32.简单说一下你对jdbc的理解.mp4 │ Java面试题33.写一个jdbc的访问oracle的列子.mp4 │ Java面试题34.jdbc中preparedStatement比Statement的好处.mp4 │ Java...

    java开源包1

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    JAVA上百实例源码以及开源项目

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    JAVA上百实例源码以及开源项目源代码

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    java开源包4

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包101

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包11

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包6

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包9

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包8

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包5

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包10

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包3

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    Java面试宝典2020修订版V1.0.1.doc

    39、oracle数据库表的备份及还原 54 40、谈谈你知道的数据库和中间件 54 41、oracle和MySQL的区别 54 42、简述Mysql的InnoDb 55 43、删除重复数据只保留一条。 55 44、一个几千万数据,发现数据查询很慢,怎么办? ...

    java开源包2

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

    java开源包7

    Oracle数据库工具 WARTS WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是...

Global site tag (gtag.js) - Google Analytics