`
shicheng
  • 浏览: 165315 次
  • 性别: 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时就会报错

相关推荐

    Java调用oracle存储过程通过游标返回临时表

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    java调用oracle存储过程(游标)相关

    以下是调用包含游标返回的Oracle存储过程的基本步骤: 1. **连接数据库**: 使用`DriverManager.getConnection()`方法建立与Oracle数据库的连接,确保已将Oracle JDBC驱动添加到项目的类路径中。 2. **创建...

    JAVA调用ORACLE存储过程游标使用

    总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....

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

    在提供的`ConnUtils2.java`文件中,很可能包含了以上所述的Java数据库操作代码,例如建立JDBC连接、处理CLOB数据类型以及调用Oracle存储过程的方法。分析这个文件可以帮助我们更好地理解实际应用中的实现细节,包括...

    Oracle存储过程out游标

    在Java中,我们可以使用JDBC API来调用Oracle存储过程并处理返回的Out游标。`OracleProcedure.java`文件应该包含了这样的代码。以下是一个简单的示例: ```java CallableStatement cs = connection.prepareCall("{ ...

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...

    利用游标返回结果集的的例子(Oracle 存储过程).doc

    在Java编程中,我们可以使用JDBC(Java Database Connectivity)来调用这些Oracle存储过程。在提供的Java代码示例中,我们首先加载Oracle的JDBC驱动,然后建立到数据库的连接。这里使用了`CallableStatement`来执行...

    springboot整合mybatis调用oracle存储过程

    本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...

    oracle存储过程学习经典入门

    用 Java 调用 Oracle 存储过程时,需要使用 JDBC 驱动程序来连接 Oracle 数据库,然后使用 CallableStatement 对象来调用存储过程。 在存储过程中做简单动态查询 在存储过程中,做简单动态查询需要使用 EXECUTE ...

    JDBC调用oracle存储过程.docx

    这种情况稍微复杂一些,因为Oracle存储过程不能直接返回列表,而是通过一个`OUT`参数返回游标(`REF CURSOR`)。首先,我们需要定义一个包`tpackage`,其中包含一个类型`t_cursor`(引用游标)和一个接受游标输出...

    Oracle 存储过程JAVA调用存储过程 游标使用

    在Java中调用Oracle存储过程,通常需要使用JDBC(Java Database Connectivity)API。以下是一个基本示例: 1. 加载Oracle驱动并建立连接: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); Connection ...

    java调用oracle存储过程或者函数

    以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。

    Oracle存储过程返回结果集

    在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`参数则允许过程向调用者返回数据。而`SYS_REFCURSOR`是Oracle提供的一种特殊类型,它允许存储过程动态地打开一个游标(即结果集)并将其作为`OUT`参数返回。 ...

    用java调用oracle存储过程总结

    se();}if(stmt != null){stmt.close();}if(conn != null){conn.close();...此外,对于存储过程的错误处理,通常需要在Oracle存储过程中添加异常捕获和处理机制,以便在Java调用时能够得到清晰的错误信息。

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

    ### Groovy将JDBC中Oracle存储过程游标转换为多层JSON 在本文档中,我们将探讨如何使用Groovy脚本结合JDBC技术从Oracle存储过程中获取数据,并将其转换为多层JSON格式。该方法特别适用于需要从XML输入中提取数据并...

    JDBC调用存储过程

    ### JDBC调用存储过程 #### 一、无返回值的存储过程 无返回值的存储过程主要用于执行数据库操作,如插入、更新或删除记录等,这类存储过程在执行后不会返回任何结果集。 ##### 存储过程示例 ```sql CREATE OR ...

    Java调用oracle存储过程总结

    通过这些步骤,你可以成功地从Java应用程序中调用Oracle存储过程。确保正确配置JDBC驱动,理解存储过程的参数类型,并熟悉JDBC API,这样就能高效地实现数据交互了。在开发过程中,可以参考Oracle的官方文档以及各种...

    oracle12 jdbc驱动包

    此外,Oracle 12c JDBC驱动还支持高级特性,如分布式事务处理、JNDI查找、连接池管理、数据源支持、以及SQL的高级功能,如批量处理、存储过程调用、游标处理等。对于大型企业级应用,这些特性尤其重要,它们能确保...

    java调用Oracle存储过程

    另外,如果存储过程返回游标(结果集),可以通过`ResultSet`接口进行处理。记得检查存储过程的返回值,它通常是一个表示成功与否的状态。 在开发过程中,可以使用诸如IntelliJ IDEA或Eclipse这样的IDE进行调试,...

    Java获取Oracle存储过程返回的Cursor

    在Java编程中,有时我们需要调用Oracle数据库的存储过程,特别是当存储过程返回一个游标(Cursor)时,这种情况在处理大量数据或者分页查询时很常见。游标允许我们逐行处理结果集,而无需一次性加载所有数据,这对于...

Global site tag (gtag.js) - Google Analytics