项目中学习技术,这句话真是有道理啊,呵呵
在此次项目中,由于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,所以总是报错
分享到:
相关推荐
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
以下是调用包含游标返回的Oracle存储过程的基本步骤: 1. **连接数据库**: 使用`DriverManager.getConnection()`方法建立与Oracle数据库的连接,确保已将Oracle JDBC驱动添加到项目的类路径中。 2. **创建...
总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....
在提供的`ConnUtils2.java`文件中,很可能包含了以上所述的Java数据库操作代码,例如建立JDBC连接、处理CLOB数据类型以及调用Oracle存储过程的方法。分析这个文件可以帮助我们更好地理解实际应用中的实现细节,包括...
在Java中,我们可以使用JDBC API来调用Oracle存储过程并处理返回的Out游标。`OracleProcedure.java`文件应该包含了这样的代码。以下是一个简单的示例: ```java CallableStatement cs = connection.prepareCall("{ ...
Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...
在Java编程中,我们可以使用JDBC(Java Database Connectivity)来调用这些Oracle存储过程。在提供的Java代码示例中,我们首先加载Oracle的JDBC驱动,然后建立到数据库的连接。这里使用了`CallableStatement`来执行...
本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...
用 Java 调用 Oracle 存储过程时,需要使用 JDBC 驱动程序来连接 Oracle 数据库,然后使用 CallableStatement 对象来调用存储过程。 在存储过程中做简单动态查询 在存储过程中,做简单动态查询需要使用 EXECUTE ...
这种情况稍微复杂一些,因为Oracle存储过程不能直接返回列表,而是通过一个`OUT`参数返回游标(`REF CURSOR`)。首先,我们需要定义一个包`tpackage`,其中包含一个类型`t_cursor`(引用游标)和一个接受游标输出...
在Java中调用Oracle存储过程,通常需要使用JDBC(Java Database Connectivity)API。以下是一个基本示例: 1. 加载Oracle驱动并建立连接: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); Connection ...
以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。
在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`参数则允许过程向调用者返回数据。而`SYS_REFCURSOR`是Oracle提供的一种特殊类型,它允许存储过程动态地打开一个游标(即结果集)并将其作为`OUT`参数返回。 ...
se();}if(stmt != null){stmt.close();}if(conn != null){conn.close();...此外,对于存储过程的错误处理,通常需要在Oracle存储过程中添加异常捕获和处理机制,以便在Java调用时能够得到清晰的错误信息。
在Java编程中,有时我们需要调用Oracle数据库的存储过程,特别是当存储过程返回一个游标(Cursor)时,这种情况在处理大量数据或者分页查询时很常见。游标允许我们逐行处理结果集,而无需一次性加载所有数据,这对于...
### Groovy将JDBC中Oracle存储过程游标转换为多层JSON 在本文档中,我们将探讨如何使用Groovy脚本结合JDBC技术从Oracle存储过程中获取数据,并将其转换为多层JSON格式。该方法特别适用于需要从XML输入中提取数据并...
### JDBC调用存储过程 #### 一、无返回值的存储过程 无返回值的存储过程主要用于执行数据库操作,如插入、更新或删除记录等,这类存储过程在执行后不会返回任何结果集。 ##### 存储过程示例 ```sql CREATE OR ...
通过这些步骤,你可以成功地从Java应用程序中调用Oracle存储过程。确保正确配置JDBC驱动,理解存储过程的参数类型,并熟悉JDBC API,这样就能高效地实现数据交互了。在开发过程中,可以参考Oracle的官方文档以及各种...
另外,如果存储过程返回游标(结果集),可以通过`ResultSet`接口进行处理。记得检查存储过程的返回值,它通常是一个表示成功与否的状态。 在开发过程中,可以使用诸如IntelliJ IDEA或Eclipse这样的IDE进行调试,...
此外,Oracle 12c JDBC驱动还支持高级特性,如分布式事务处理、JNDI查找、连接池管理、数据源支持、以及SQL的高级功能,如批量处理、存储过程调用、游标处理等。对于大型企业级应用,这些特性尤其重要,它们能确保...