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!!!!!!的时候说明分页效果执行了!

你可能感兴趣的:(java,oracle,sql,jdbc)