设为首页 收藏本站
查看: 702|回复: 0

[经验分享] Java调用Oracle数据库的分页存储过程

[复制链接]
YunVN网友  发表于 2016-8-14 06:28:13 |阅读模式
  首先先贴出来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代码 DSC0000.gif


  • public class ConnToOracle {   
  •     final static Logger logger = Logger.getLogger(ConnToOracle.class);   
  •     public static Connection getConnection(String url, String userName, String password) {   
  •         Connection conn = null;   
  •         try {   
  •             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());   
  •             conn = DriverManager.getConnection(url, userName, password);   
  •             System.out.println("Connection Starting.......");   
  •         }  catch (SQLException e) {   
  •             logger.error("Connection error......");   
  •         }   
  •         return conn;   
  •     }   
  •     public static void select() throws Exception {   
  •         Connection conn = null;   
  •         try {   
  •             conn = getConnection("jdbc:oracle:thin:@192.168.6.80:1521:C2SServer""d1xn_cmc","d1xn_cmc");   
  • //          String call= "{call DB_Oper.return_DataSet(?,?,?,?,?,?,?,?)}";这种条用方式也是OK的   
  •             String call= "begin DB_Oper.return_DataSet(?,?,?,?,?,?,?,?);end;";   
  •             CallableStatement proc = conn.prepareCall(call);   
  •             proc.setString(1"game_goods");   
  •             proc.setString(2null);   
  •             proc.setString(3"20");   
  •             proc.setString(4"1");   
  •             proc.setString(5"n_ID");   
  •             proc.setString(6"0");   
  •             proc.registerOutParameter(7, OracleTypes.NUMBER);//注册返回的总记录数的数据类型   
  •             proc.registerOutParameter(8, OracleTypes.CURSOR);//注册返回的数据结果集的数据类型   
  •             proc.execute();   
  •             int a1 = proc.getInt(7);//获得总的记录集   
  •             System.out.println(a1);   
  •             ResultSet rs = (ResultSet)proc.getObject(8);//获得返回的数据集   
  •             while (rs.next()) {   
  •                 System.out.println(rs.getString(1));   
  •             }   
  •         } catch (SQLException e) {   
  •             e.printStackTrace();   
  •         } finally {   
  •             if (conn != null) {   
  •                 conn.close();   
  •             }   
  •         }   
  •     }   
  • }  

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-257291-1-1.html 上篇帖子: Oracle中的NVL,NVL2,NULLIF,COALESCE通用函数 下篇帖子: oracle 左外连接,右外连接,全外连接
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表