比如传一个学生的集合至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存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
总结,通过Java调用Oracle存储过程,我们需要配置JDBC驱动,建立数据库连接,创建CallableStatement,设置参数,执行存储过程,并处理返回的结果。在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的...
总结,Java调用Oracle存储过程涉及的关键点包括:JDBC连接,CallableStatement,输入/输出参数的设定,以及结果集的处理。理解这些知识点,能够帮助开发者有效地实现数据库操作,提升应用性能。
在这个入门实例中,我们将重点探讨如何通过Java调用Oracle的存储过程来实现这些基本操作,并结合使用DOM4J解析XML配置文件来管理数据库连接。 首先,存储过程是Oracle数据库中预编译的SQL语句集合,它可以封装复杂...
我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用这些存储过程。 Oracle 存储过程 首先,我们编写了两个 Oracle 存储过程:`P_EMP_SELECT` 和 `P_EMP_ADD`。 `P_EMP_SELECT` ...
以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....
通过这些步骤,你可以成功地从Java应用程序中调用Oracle存储过程。确保正确配置JDBC驱动,理解存储过程的参数类型,并熟悉JDBC API,这样就能高效地实现数据交互了。在开发过程中,可以参考Oracle的官方文档以及各种...
本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...
通过本文的探讨,我们不仅了解了如何在Java中调用Oracle存储过程并传递集合参数的基本原理,还深入实践了相关的技术细节。这对于构建高性能、高可靠性的企业级应用而言,是不可或缺的知识点。在未来,随着数据量的...
在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...
3. **Java调用Oracle函数**: 在Java中,你需要使用Oracle的JDBC驱动(ojdbc.jar和nls_charset12.jar)来与Oracle数据库交互。首先,你需要加载Oracle驱动并建立数据库连接。然后,你可以通过`CallableStatement`来...
Java调用Oracle存储过程是数据库操作中常见的任务,特别是在需要执行复杂业务逻辑或者批量处理数据时。本篇文章将详细介绍如何通过Java与Oracle数据库交互,调用存储过程,并提供几个简单的实例帮助新手理解。 首先...
在Java编程中,调用Oracle数据库的存储...总之,通过Java调用Oracle存储过程,我们可以有效地执行数据库操作,同时利用存储过程带来的性能和安全优势。了解如何正确设置参数、执行和处理结果是成功实现这一目标的关键。
总的来说,Java调用Oracle存储过程涉及JDBC的使用、CallableStatement对象的创建和管理,以及对存储过程参数的正确处理。理解并掌握这些知识点,将有助于你更高效地进行Java与Oracle数据库的交互。通过提供的源码...
在Java编程中,与Oracle数据库交互是常见的任务之一,而调用Oracle存储过程可以实现复杂的业务逻辑。本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们...
在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...
总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...
本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...