`

JAVA调用ORACLE存储过程返回集合

 
阅读更多

比如传一个学生的集合至ORACLE存储过程

1、首先定义STUDENT TYPE

 

CREATE OR REPLACE TYPE STU AS OBJECT
(
  id number,
  name varchar2(20),
  code varchar2(20)
)

 2、定义集合类型 STULIST TYPE

CREATE OR REPLACE TYPE STULIST AS TABLE OF stu

 3、建立对应的表

drop table student
create table student(
id number primary key not null,
name varchar2(20),
code varchar2(20)
)

 4、建立存储过程(测试)

create or replace procedure getStu(uList in STULIST,ret_cursor out sys_refcursor) as
begin 
  dbms_output.put_line(uList.Count);
  open ret_cursor for select * from student;
end;

 5、java代码调用(这里用的HIBERNATE,以及tomcat连接池(存储过程名称以及TYPE名称都需要大写)

public void test(){
	    getSession().doWork(new Work() {
            @Override
            public void execute(Connection conn)
                throws SQLException {
                CallableStatement call = conn.prepareCall("{Call getStu(?,?)}");
                PoolableConnection poolConnection = (PoolableConnection)conn.getMetaData().getConnection();
                Connection oracleConn = poolConnection.getDelegate();//这里获取的才是native连接
                StructDescriptor recDesc = StructDescriptor.createDescriptor("STU", oracleConn); 
                ArrayList<STRUCT> pstruct = new ArrayList<STRUCT>();  
                List<Student> stuList = Student.createList();
                for(int i=0;i<stuList.size();i++){
                    Object[] record = new Object[3];  
                    record[0] = stuList.get(i).getId();
                    record[1] = stuList.get(i).getName();
                    record[2] =  stuList.get(i).getCode();
                    STRUCT item = new STRUCT(recDesc, oracleConn, record);                  
                    pstruct.add(item);
                }
                
                
                oracle.sql.ArrayDescriptor uListDesc =
                    oracle.sql.ArrayDescriptor.createDescriptor("STULIST", oracleConn);
                oracle.sql.ARRAY uListArray = new oracle.sql.ARRAY(uListDesc,  oracleConn, pstruct.toArray());
                call.setArray(1, uListArray);
                call.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
                call.execute();
                ResultSet rs = (ResultSet)call.getObject(2);
                while(rs.next()){
                    System.out.println(rs.getString("name"));
                }
                
            }
        });
	}

 注意:如果用的是C3P0,并且使用了SPRING可以用以下方法获取本地连接

Connection conn = setter.getPreparedStatement().getConnection();
        C3P0NativeJdbcExtractor cp30NativeJdbcExtractor = new C3P0NativeJdbcExtractor();
        conn = (OracleConnection) cp30NativeJdbcExtractor
                .getNativeConnection(conn);

 

 

 

分享到:
评论

相关推荐

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

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

    java调用Oracle存储过程的代码

    总结,通过Java调用Oracle存储过程,我们需要配置JDBC驱动,建立数据库连接,创建CallableStatement,设置参数,执行存储过程,并处理返回的结果。在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的...

    Java调用带参数的存储过程并返回集合

    总结,Java调用Oracle存储过程涉及的关键点包括:JDBC连接,CallableStatement,输入/输出参数的设定,以及结果集的处理。理解这些知识点,能够帮助开发者有效地实现数据库操作,提升应用性能。

    java调用oracle存储过程入门实例 增删改查

    在这个入门实例中,我们将重点探讨如何通过Java调用Oracle的存储过程来实现这些基本操作,并结合使用DOM4J解析XML配置文件来管理数据库连接。 首先,存储过程是Oracle数据库中预编译的SQL语句集合,它可以封装复杂...

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

    我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用这些存储过程。 Oracle 存储过程 首先,我们编写了两个 Oracle 存储过程:`P_EMP_SELECT` 和 `P_EMP_ADD`。 `P_EMP_SELECT` ...

    hibernate query调用oracle存储过程

    以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....

    Java调用oracle存储过程总结

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

    Java调用Oracle存储过程的方法

    本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...

    Java调用存储过程--传入集合参数

    通过本文的探讨,我们不仅了解了如何在Java中调用Oracle存储过程并传递集合参数的基本原理,还深入实践了相关的技术细节。这对于构建高性能、高可靠性的企业级应用而言,是不可或缺的知识点。在未来,随着数据量的...

    Springboot调用Oracle存储过程的几种方式.docx

    在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...

    Java调用oracle函数返回oracle类(类似)集合

    3. **Java调用Oracle函数**: 在Java中,你需要使用Oracle的JDBC驱动(ojdbc.jar和nls_charset12.jar)来与Oracle数据库交互。首先,你需要加载Oracle驱动并建立数据库连接。然后,你可以通过`CallableStatement`来...

    java调用oracle存储过程

    Java调用Oracle存储过程是数据库操作中常见的任务,特别是在需要执行复杂业务逻辑或者批量处理数据时。本篇文章将详细介绍如何通过Java与Oracle数据库交互,调用存储过程,并提供几个简单的实例帮助新手理解。 首先...

    java调用oracle存储过程实现增删改查

    在Java编程中,调用Oracle数据库的存储...总之,通过Java调用Oracle存储过程,我们可以有效地执行数据库操作,同时利用存储过程带来的性能和安全优势。了解如何正确设置参数、执行和处理结果是成功实现这一目标的关键。

    java调用Oracle存储过程的简单例子源码

    总的来说,Java调用Oracle存储过程涉及JDBC的使用、CallableStatement对象的创建和管理,以及对存储过程参数的正确处理。理解并掌握这些知识点,将有助于你更高效地进行Java与Oracle数据库的交互。通过提供的源码...

    Java调用oracle存储过程输出自定义对象或二维表

    在Java编程中,与Oracle数据库交互是常见的任务之一,而调用Oracle存储过程可以实现复杂的业务逻辑。本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们...

    ibatis调用oracle存储过程

    在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...

    oracle存储过程返回多行多列的结构化数组,java调用并解析

    总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...

    Oracle存储过程返回结果集

    本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...

Global site tag (gtag.js) - Google Analytics