转:http://bing-zz.iteye.com/blog/1120421
重点在于过程调用,返回多条记录
package bing.oracleprocedure; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Types; import oracle.jdbc.OracleTypes; /** * 练习存储过程的调用 * @author bing * @version 2011-07-09 */ public class Test { public static void test(){ System.out.println("=====Test.test====="); Connection conn = new Conn().getConnection(); // 获得数据连接对象 CallableStatement cstmt = null; ResultSet rs = null; try{ /* -- 创建练习用的表t_test create table t_test( t_id number(4) not null, t_name varchar2(20), t_msg varchar2(100) ); alter table t_test add constraint pk_t_test primary key(t_id); -- 编写练习用的过程up_insert_test -- 插入数据到表t_test create or replace procedure up_insert_test(v_id in number, v_name in varchar2, v_msg in varchar2) is begin insert into t_test(t_id,t_name,t_msg) values(v_id,v_name,v_msg); end up_insert_test; / */ // 过程调用,无返回值 cstmt = conn.prepareCall("call up_insert_test(?,?,?)"); cstmt.setInt(1, 1); cstmt.setString(2, "bing"); cstmt.setString(3, "super man"); cstmt.execute(); cstmt.setInt(1, 2); cstmt.setString(2, "admin"); cstmt.setString(3, "a worker"); cstmt.execute(); cstmt.setInt(1, 3); cstmt.setString(2, "user"); cstmt.setString(3, "a user"); cstmt.execute(); System.out.println("插入成功"); /* -- 编写练习用的存储过程up_select_test_1 -- 输入id,输出name,查询t_test中是单条记录 create or replace procedure up_select_test_1 (v_id in number, v_name out varchar2) is begin select t_name into v_name from t_test where t_id = v_id; end up_select_test_1; / */ // 过程调用,返回单条记录 // oracle过程没有返回值,所有返回值都是通过out参数来替代的 cstmt = conn.prepareCall("call up_select_test_1(?,?)"); cstmt.setInt(1, 1); cstmt.registerOutParameter(2, Types.VARCHAR);// 注册out参数,注意序号对应过程的参数序号 cstmt.execute(); String name = cstmt.getString(2);// 获取out参数,注意序号对应过程的参数序号 System.out.println("查询成功"); System.out.println("name = " + name); /* -- 编写包upk_select_test,为存储过程up_select_test_2准备 -- create or replace package upk_select_test as type uc_test is ref cursor; end upk_select_test; / -- 编写存储过程up_select_test_2 -- 查询表t_test中的所有记录 create or replace procedure up_select_test_2 (uc_result out upk_select_test.uc_test) is begin open uc_result for select * from t_test; end up_select_test_2; / */ // 过程调用,返回多条记录 // 集合不能用一般的参数,必须要用pagkage,从上面的注释可以看到游标作为out参数,过程返回的是一个游标 cstmt = conn.prepareCall("call up_select_test_2(?)"); cstmt.registerOutParameter(1, OracleTypes.CURSOR); cstmt.execute(); rs = (ResultSet) cstmt.getObject(1); System.out.println("查询成功"); while(rs.next()){ System.out.println("id = " + rs.getString(1) + " name = " + rs.getString(2) + " msg = " + rs.getString(3)); } rs.close(); cstmt.close(); conn.close(); }catch(Exception e){ System.out.println("=====Test.test=====\n操作失败"); e.printStackTrace(); } } public static void main(String[] args) { new Test().test(); /* 控制台输出: =====Test.test===== 插入成功 查询成功 name = bing 查询成功 id = 3 name = user msg = a user id = 1 name = bing msg = super man id = 2 name = admin msg = a worker */ } }
package bing.oracleprocedure; import java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接类 * @author bing * @version 2011-07-09 * */ public class Conn { private static String DRIVER = "oracle.jdbc.driver.OracleDriver"; private static String URL = "jdbc:oracle:thin:@127.0.0.1:1521:oracledbtest"; private static String USER = "bing"; private static String PASSWORD = "bing"; private Connection conn = null; /** * 获得连接对象 * @return 连接对象 */ public Connection getConnection(){ try{ if(conn==null||conn.isClosed()){ Class.forName(DRIVER); conn = DriverManager.getConnection(URL, USER, PASSWORD); } }catch(Exception e){ e.printStackTrace(); } return conn; } }
相关推荐
Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。
### JAVA调用ORACLE存储过程知识点详解 #### 一、背景与概述 在现代软件开发过程中,集成多种技术栈是常态。特别是在企业级应用中,Java 和 Oracle 数据库的组合非常常见。通过 Java 调用 Oracle 存储过程不仅能够...
总之,Java调用Oracle存储过程,尤其是处理游标,需要理解JDBC的使用、Oracle特定的类型以及存储过程的参数传递方式。通过合理的编程实践,我们可以高效地在Java应用程序中集成Oracle数据库的复杂操作。
总结,通过Java调用Oracle存储过程,我们需要配置JDBC驱动,建立数据库连接,创建CallableStatement,设置参数,执行存储过程,并处理返回的结果。在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的...
### Java调用Oracle存储过程详解 #### 一、概述 在企业级应用开发中,数据库存储过程被广泛用于实现复杂的业务逻辑处理。由于其高效性和安全性,存储过程常常成为首选方案之一。Java作为主流的企业级开发语言之一...
以上代码展示了如何在Java中调用Oracle数据库的三种类型的存储过程:无返回值的存储过程、有单个返回值的存储过程以及返回列表的存储过程。对于无返回值的存储过程,主要涉及的是参数的输入,通过`execute()`方法...
java调用oracle存储过程.wps java调用oracle存储过程.wps java调用oracle存储过程.wps
本文主要探讨如何在Java中调用Oracle存储过程,以及如何通过Java创建Oracle存储过程。 首先,我们来看如何在Java中调用不带输出参数的Oracle存储过程。在给定的例子中,有一个名为`pro1`的存储过程,它接受一个整数...
总之,Java调用Oracle存储过程涉及的主要知识点包括JDBC API、Oracle JDBC驱动、`CallableStatement`对象、参数绑定、结果集处理以及资源管理。通过学习和实践这些内容,开发者可以有效地在Java应用中集成Oracle...
在Java中调用Oracle存储过程,我们需要使用JDBC(Java Database Connectivity),这是Java标准库提供的一组接口和类,用于与各种数据库进行通信。首先,我们需要添加Oracle JDBC驱动到项目中,例如ojdbc.jar。 1. *...
### JAVA调用ORACLE存储过程通用类 #### 概述 在Java开发中,经常会遇到需要与数据库交互的情况,特别是当涉及到复杂的业务逻辑时,利用数据库的存储过程可以有效地提高程序性能并简化代码结构。本篇文章将详细...
本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...