本文为学习笔记
Test.java:
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
*/
}
}
Conn.java:
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存储过程涉及的主要知识点包括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...