{传智播客} (学习笔记)--Java调用存储过程实现Oracle数据库分页

 

存储过程代码:

--1创建一个包,在该包中,定义类型 test_cursor ,是个游标

create or replace package testpackage as

type test_cursor is ref cursor;

end testpackage;

 

--开始编写分页的过程

create or replace procedure fenye

(tableName in varchar2,

pagesize in number, --一页显示记录数

pageNow in number, --显示第几页

myrows out number,--总记录数

myPageCount out number,--总页数

p_cursor out testpackage.test_cursor--返回的记录集

) is

 

--定义部分

--定义sql语句 字符串

v_sql varchar2(1000);

--定义两个整数

v_begin number:=(pageNow-1)*pagesize+1;  --现在 (emp , 3,1,x,x,x)

v_end number:=pageNow*pagesize;

 

begin

--执行部分

--下面我们拼接分页查询语句.

v_sql:='select * from (select t1.*,rownum rn from (select * from '|| tableName

||' order by ename) t1 where rownum<='||v_end||') where rn>='||v_begin;

--把游标和sql关联

open p_cursor for v_sql;

--计算myrowsmyPageCount

--组织一个sql

v_sql:='select count(*) from '||tableName;

--执行sql,并把返回的值,赋给myrows;

execute immediate v_sql into myrows;

--计算myPageCount

if mod(myrows,pagesize)=0 then --比如myrows=10 pagesize=2

myPageCount:=myrows/pagesize;

else

myPageCount:=myrows/pagesize+1;--比如myrows=10 pagesize=3

end if;

--关闭游标(如果返回给java程序用,则不能关闭p_cursor)

--close p_cursor;

end;

--------------------------------------------------------------------------

Java调用过程代码:

public class IliyaPro {

    public static void main(String[] args) throws Exception {

       Connection ct = null;

       CallableStatement cs = null;

       ResultSet rs = null;

       try {

           Class.forName("oracle.jdbc.driver.OracleDriver");

           ct = DriverManager

                  .getConnection("jdbc:oracle:thin:@127.0.0.1:1521:iliya",

                         "scott", "tiger");         

           cs=ct.prepareCall("{call fenye(?,?,?,?,?,?)}");     

           //表名

           cs.setString(1, "emp");

           //每页显示的行数(记录数)

           cs.setInt(2, 7);

           //第几页

           cs.setInt(3, 1);

           //总记录数

           cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);

           //总页数

           cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);

           //返回的记录数,游标

           cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);

          

           // 执行过程.

           cs.execute();

           // 得到结果,结果集存在游标里面

           rs = (ResultSet) cs.getObject(6);

           while (rs.next()) {

              System.out.println("名字:" + rs.getString(2));

           }         

           System.out.println("总记录数为" + cs.getInt(4));

           System.out.println("总页数为:" + cs.getInt(5));

       } catch (Exception e) {

           e.printStackTrace();

           // TODO: handle exception

       } finally {

           // 关闭资源..

           if (rs != null) {

              rs.close();

           }

           if (cs != null) {

              cs.close();

           }

           if (ct != null) {

              ct.close();

           }

       }

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值