首页 > 数据库技术 > 详细

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

时间:2015-12-12 23:14:27      阅读:670      评论:0      收藏:0      [点我收藏+]

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

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

}

}

 

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

原文:http://www.cnblogs.com/viagraHero/p/5041890.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!