`
shicheng
  • 浏览: 162377 次
  • 性别: Icon_minigender_1
  • 来自: 泉州
社区版块
存档分类
最新评论

jdbc调用返回游标的oracle存储过程

阅读更多

项目中学习技术,这句话真是有道理啊,呵呵

在此次项目中,由于sql比较复杂,就使用存储过程来处理,但是需要返回一个数据集,这就想到了使用游标,但是之前的项目一直没有用过,需要学习一下。今天周末,就利用这个时间收集资料,学习了一下,下面将学习结果总结如下。

表结构:

create table item

(
      item_id varchar2(32),

      itemname varchar2(50)

)

一.写一个返回游标的存储过程

create or replace procedure getcur(p_rc out sys_refcursor)
    is
     begin
          open p_rc for 'select * from item';
end getcur;

 sys_refcursor这个是oracle自带的返回游标的类型。

二.写一段pl/sql测试一下存储过程是否正确

 declare 
       items sys_refcursor;
   begin
        getcur(items);
        for item in items
        loop
            dbms_output.put_line(item.itemname);
        end loop;
  end;

 

三.写一段java代码测试

public void testcur() {
 Connection conn = this.getSession().connection();
 CallableStatement callsta = null;
 ResultSet rs = null;
 try {
  callsta = conn.prepareCall("{call getcur(?)}");
  callsta.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
  callsta.execute();
  rs = (ResultSet)callsta.getObject(1);
  while(rs.next()){
   System.out.println(rs.getString(1));
  }
  rs.close();
  callsta.close();
  conn.close();
 } catch (Exception e) {
  e.printStackTrace();
 }
}

 1. {call getcur(?)}:调用存储过程,?代码参数

 2. callsta.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);这个是设置返回类型,之前使用

        java.sql.Types.REF一直报错“java.sql.SQLException: ORA-03115: 不支持的网络数据类型或表示法”,

        查询了一下,使用oracle.jdbc.OracleTypes.CURSOR这个就没有问题了。

 3.网上查了下,说是可以使用oracle.jdbc.OracleCallableStatement来代替CallableStatement ,

    返回结果的时候使用rs = cs.getCursor(1);就可以得到,但是我的使用报类型错误,

    分析原因,应该是我使用了连接池c3p0,所以总是报错

 

1
0
分享到:
评论
2 楼 shicheng 2009-11-21  
我用的是jdk1.5
1 楼 allin 2009-11-20  
请你lz用的是jdk1.4的还是6.0的
我使用1.4版本的jdk使用oracle.jdbc.OracleTypes.CURSOR是可以用的
但是使用jdk6.0时就会报错

相关推荐

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    Spring JdbcTemplate调用Oracle存储过程输出游标结果集实现增删改查

    groovy将JDBC中oracle存储过程游标转换为多层json

    本例是我工作中的一些实操例子,亦是我工作日志,记录在此,既可作为我自己的总结,也可以此分享给同行借鉴。...2.创建oracle存储过程脚本 3.JDBC调用存储过程语句 4.创建Groovy脚本 5.xml入参示例 6.json出参示例

    jdbc连接例子 Oracle CLOB转换为String java调用存储过程之输出游标

    NULL 博文链接:https://vernonchen163.iteye.com/blog/1902788

    详解Hibernate呼叫Oracle的存贮过程和函数

    本示例演示Hibernate 3.2呼叫Oracle的存贮过程和函数,以及通过Hibernate的Query接口简化JDBC的开发步骤--两个步骤得到List集合。使用这种方式开发可以要求开发人员不需要太了解Hibernate框架,但是需要开发人员非常...

    jdbc基础和参考

    new oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver(driver); 3.加虚拟机参数jdbc.drivers -Djdbc.drivers=oracle.jdbc.driver.OracleDriver 4.从Jdk6.0以后要求,JDBC 4.0 Drivers ...

    PL-SQL教程(私塾在线)视频配套学习资料

    PL/SQL的学习教程资料,由Java私塾制作,配套视频由私塾在线提供. 系统学习PL/SQL的结构化编程(包括游标、异常、包、触发器、动态sql等);掌握使用jdbc调用存储过程。

    PL/SQL 基础.doc

    6) PL/SQL: 存储在数据库内运行, 其他方法为在数据库外对数据库访问,只适合ORACLE; 2. PL/SQL 1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言; 2) Oracle客户端工具访问Oracle...

    Java面试宝典2020修订版V1.0.1.doc

    19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 ...

    java基础题 很全面

    6. 写一段Jdbc连Oracle的程序. 32 7. 编码实现内部类 34 8. 输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset 34 9. 如何去小数点前两位,并四舍五入...

    JAVA面试题最全集

    描述使用JDBC连接数据库的过程 72.EJB分为几类?什么是BMP,CMP? 73.什么是JNDI? 74.ADO是什么?ActiveX数据对象,是一个应用级程序接口. 75.四种JDBC方式?目前的版本? 76.EJB有哪几种?区别是什么? 77.JavaBean与...

    javaSE代码实例

    6.1.2 面向过程与面向对象思想的对比 78 6.1.3 面向对象技术的背景和特点 79 6.2 类的定义与对象的创建 80 6.3 成员变量 81 6.3.1 成员变量的开发与使用 81 6.3.2 成员变量的初始值 82 6.3.3 对象引用...

Global site tag (gtag.js) - Google Analytics