天天看点

Oracle学习笔记之存储过程(2)java调用存储过程实现分页效果demo

---开始编写分页的存储过程

---编写一个包

create or replace package testpackage as

type test_curror 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_curror ----返回的记录集

) is

--定义部分

---定义一个sql语句。字符串

v_sql varchar2(1000);

-----定义两个整数

v_begin number:=(pageNow-1)*Pagesize+1;

v_end number:=pageNow*Pagesize;

begin

---执行部分

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

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

---把游标和sql关联

open p_cursor for v_sql;

---计算myrows和myPageCount

---组织了一个SQL语句

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

----执行一个SQL,并把返回的值赋给myrows

execute immediate v_sql into myrows;

---计算mypageCount

if mod(myrows,Pagesize)=0 then

myPageCount:=myrows/Pagesize;

else

myPageCount:=myrows/Pagesize+1;

end if;

---关闭游标

---close p_

end;

java代码:

try {

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

Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","hg","hg");

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

//给问号赋值

cs.setString(1, "emp");

cs.setInt(2, 5);//一页显示几条

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);

//取出总记录数--这里getInt里的4是根据你前面该参数的位置决定的

//忘了执行了。。。。

cs.execute();

int rowNum=cs.getInt(4);

int pageCount=cs.getInt(5);

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

//显示结果,测试

System.out.println("总共页数为"+pageCount+"每页显示的页数为:5");

System.out.println("rowNum:"+rowNum);

System.out.println("总页数:"+pageCount);

while (rs.next()) {

System.out.println("编号:"+rs.getInt(1)+"姓名:"+rs.getString(2));

}

System.out.println("success!!!!!!!!!!!!!!!!!");

} catch (Exception e) {

// TODO: handle exception

}

看到success!!!!!!的时候说明分页效果执行了!