首页 > 数据库 > Oracle > 正文

Oracle Package返回游标和Java调用

2024-08-29 13:34:42
字体:
来源:转载
供稿:网友

  创建测试Oracle包: Oracle Package返回游标和Java调用create or replace package pkg_test asOracle Package返回游标和Java调用Oracle Package返回游标和Java调用type t_ref is ref cursor;Oracle Package返回游标和Java调用PRocedure p_test(cur_ref out t_ref);Oracle Package返回游标和Java调用Oracle Package返回游标和Java调用end pkg_test;Oracle Package返回游标和Java调用/Oracle Package返回游标和Java调用Oracle Package返回游标和Java调用create or replace package body pkg_test asOracle Package返回游标和Java调用Oracle Package返回游标和Java调用procedure p_test(cur_ref out t_ref) isOracle Package返回游标和Java调用Oracle Package返回游标和Java调用beginOracle Package返回游标和Java调用open cur_ref for 'select * from test';Oracle Package返回游标和Java调用end p_test;Oracle Package返回游标和Java调用Oracle Package返回游标和Java调用end pkg_test;Oracle Package返回游标和Java调用/
  
  下面是jdbc代码的调用。   当然假如采用jdbc直接获得Connection下面的代码是没问题的。 Oracle Package返回游标和Java调用oracle.jdbc.OracleCallableStatement cs = null;Oracle Package返回游标和Java调用String sqlStr = "{call firstpage.getSeniorHighSchool(?,?,?)}";Oracle Package返回游标和Java调用ResultSet rs = null;Oracle Package返回游标和Java调用try{Oracle Package返回游标和Java调用cs = (oracle.jdbc.OracleCallableStatement)conn.prepareCall(sqlStr);Oracle Package返回游标和Java调用cs.setLong(1,arg[0]);Oracle Package返回游标和Java调用cs.setLong(2,arg[1]);Oracle Package返回游标和Java调用Oracle Package返回游标和Java调用cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR);Oracle Package返回游标和Java调用cs.execute();Oracle Package返回游标和Java调用rs = cs.getCursor(3);Oracle Package返回游标和Java调用Oracle Package返回游标和Java调用while(rs.next()){Oracle Package返回游标和Java调用//...........Oracle Package返回游标和Java调用}Oracle Package返回游标和Java调用rs.close();Oracle Package返回游标和Java调用cs.close();Oracle Package返回游标和Java调用}catch(Exception e){Oracle Package返回游标和Java调用System.out.println("prodUCe error ");Oracle Package返回游标和Java调用e.printStackTrace();Oracle Package返回游标和Java调用}
  但是,假如采用连接池(比如:采用Weblogic或jboss等web服务器自带的连接池) 哈哈,这段代码就会让你头疼了。不信你试试。抛出CastClassException哈哈。   下面是另一种写法,保你没事。这种写法风水好。哈哈 Oracle Package返回游标和Java调用CallableStatement cs = null;Oracle Package返回游标和Java调用cs = conn.prepareCall(sql);Oracle Package返回游标和Java调用cs.setInt(1,maxrow);Oracle Package返回游标和Java调用cs.setInt(2,minrow);Oracle Package返回游标和Java调用cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR);Oracle Package返回游标和Java调用cs.execute();Oracle Package返回游标和Java调用rs = (ResultSet)cs.getObject(3);   差别很简单。   可以看看weblogic和jboss实现连接池的代码就知道了。   一路ok了。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表