java连接oracle数据库调用存储过程实现分页查询(emp为例)

第一步:建一个含游标类型的包

sql>create or replace package testPackage

      as type test_cursor is ref cursor;    --定义名为test_cursor 的游标

      end testPackage;

第二步:编写分页的存储过程

sql>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 varchar(1000);

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

      v_end number:=pageSize*pageNow;

      --执行部分

      begin

      v_sql:='select * from (select a1.*,rownum rn from (select * from '||tableName||') a1 where

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

      open P_cursor for v_sql;  --游标关联sql

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

      execute immediate v_sql into myRows;

      if mod(myRows,pageSize)=0 then

      myPageCount:=myRows/pageSize;

      else

      myPageCount:=myRows/pageSize+1;

      end if;

      close P_cursor;

      end;

      /

第三步 java调用该过程  记得引进jar 包

import java.sql.*;

public class fenYe {

public static void main(String [] args){

try{

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

Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","tiger");  // ORCL 位数据库名

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

//给?赋值

cs.setString(1,"emp");

cs.setInt(2,5);//每页显示5行

cs.setInt(3,2);// 显示第二页

// 注册返回值

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

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

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

cs.execute();//执行

int rowNum=cs.getInt(4);

int pageCount=cs.getInt(5);

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

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

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

while(rs.next()){

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

}catch(Exception e){

e.printStackTrace();}

}

}

猜你喜欢

转载自blog.csdn.net/DarlingRay/article/details/81070094
今日推荐