JAVA与ORACLE存储过程

在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器。在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的。相对来说,数据库系统中的触发器也是一种存储过程。存储过程在数据库中运算时自动生成各种执行方式,因此,大大提高了对其运行时的执行速度。在大型数据库系统如Oracle、SQL Server中都不仅提供了用户自定义存储过程的功能,同时也提供了许多可作为工具进行调用的系统自带存储过程。

所谓存储过程 (Stored Procedure),就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
由于J2EE体系一般建立大型的企业级应用系统,而一般都配备大型数据库系统如Oracle或者SQL Server,在本文《JAVA与Oracle存储过程》中将介绍JAVA跟Oracle存储过程之间的相互应用跟相互间的各种调用。

一、JAVA调用Oracle存储过程
JAVA跟Oracle之间最常用的是JAVA调用Oracle的存储过程,以下简要说明下JAVA如何对Oracle存储过程进行调用。
Ⅰ、不带输出参数情况
过程名称为pro1,参数个数1个,数据类型为整形数据
查看复制到剪切板打印
import java.sql.*;

public class ProcedureNoArgs {
public static void main(String args[]) throws Exception {
// 加载Oracle驱动
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
// 获得Oracle数据库连接
Connection conn = DriverManager.getConnection(
" jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd);
// 创建存储过程的对象
CallableStatement c = conn.divpareCall(" {call pro1(?)} ");
// 给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188
c.setInt(1, 188);
// 执行Oracle存储过程
c.execute();
conn.close();
}
}

import java.sql.*;

public class ProcedureNoArgs {
public static void main(String args[]) throws Exception {
// 加载Oracle驱动
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
// 获得Oracle数据库连接
Connection conn = DriverManager.getConnection(
" jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd);
// 创建存储过程的对象
CallableStatement c = conn.divpareCall(" {call pro1(?)} ");
// 给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188
c.setInt(1, 188);
// 执行Oracle存储过程
c.execute();
conn.close();
}
}

Ⅱ、带输出参数的情况
过程名称为pro2,参数个数2个,数据类型为整形数据,返回值为整形类型
查看复制到剪切板打印
import java.sql.*;

public class ProcedureWithArgs {
public static void main(String args[]) throws Exception {
// 加载Oracle驱动
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
// 获得Oracle数据库连接
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd);
// 创建Oracle存储过程的对象,调用存储过程
CallableStatement c = conn.divpareCall("{call pro2(?,?)}");
// 给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188
c.setInt(1, 188);
// 注册存储过程的第二个参数
c.registerOutParameter(2, java.sql.Types.INTEGER);
// 执行Oracle存储过程
c.execute();
// 得到存储过程的输出参数值并打印出来
System.out.println(c.getInt(2));
conn.close();
}
}

import java.sql.*;

public class ProcedureWithArgs {
public static void main(String args[]) throws Exception {
// 加载Oracle驱动
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
// 获得Oracle数据库连接
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd);
// 创建Oracle存储过程的对象,调用存储过程
CallableStatement c = conn.divpareCall("{call pro2(?,?)}");
// 给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188
c.setInt(1, 188);
// 注册存储过程的第二个参数
c.registerOutParameter(2, java.sql.Types.INTEGER);
// 执行Oracle存储过程
c.execute();
// 得到存储过程的输出参数值并打印出来
System.out.println(c.getInt(2));
conn.close();
}
}

以上即是在JAVA中调用Oracle存储过程的最简单的实例,接下来将介绍有关JAVA跟Oracle存储过程的其他方面内容。
======================================================================
JAVA与Oracle存储过程(二)
在前一篇文章中简单介绍了JAVA程序如何调用Oracle存储过程的基本语法程序结构, 本文将介绍JAVA跟Oracle的另一种关系,即通过JAVA编写Oracle存储过程。 通常情况下,我们都是使用Oracle数据库系统中的ps/sql语句来为oracle编写各种存储过程,不过,在Oracle的第八个版本8之后,为我们提供了编写存储过程的另一种新的选择,那就是使用JAVA来编写Oracle存储过程。从Oracle8.0版本开始,在Oracle数据库系统中自带了java虚拟机jvm,因此使得Oracle内置了对JAVA的全面支持,我们在使用JAVA可以实现的任何功能现在都可以放到Oracle中来实现,当然我们也可以在oracle中来操作其他数据库。JAVA的加入让Oracle展能力得到了升华,我们可以定义一个触发器来在进行任何数据库操作的时候对外界进行其他操作的功能。

下面准备举个例子来说明下如何通过JAVA来创建Oracle存储过程,例子不在于有多高级,功能不在于多完善,我想,如果能从一个简单例子,引申出去,去繁衍更多的方法,去实现更多你自己需要的功能,这才是简单例子的作用。所以,认为我写的简单,写的肤浅的人你可以不用看,但是我写出来就是为了让任何有JAVA基础的人都能容易懂得,而从简单的例子去构造出其他的应用。个人认为,中国软件界更需要有的程序员素质,就是能更多帮助那些初学者,让他们少走弯路,才能让我国的IT行业有更好的发展,对那些将初学者的问题拒之千里之外的程序员的做法,在此表示遗憾....

当然,以上是题外话,但是希望能引起大家的思考,,,,能引起在我博客话我发的内容简单的人的反思。。。

二、使用JAVA创建Oracle存储过程
先看下如何使用JAVA来编写Oracle存储过程,我们在Oracle的sql plus中编写语句。
Ⅰ、启动SQL PLUS
Ⅱ、编写JAVA类,定义JAVA类别名,本存储过程为简单地输出传入参数的平方值。

查看复制到剪切板打印
create or replace and compile java source named "PF" as
/**
* 通过JAVA类来 创建Oracle存储过程
*/
package org.oraclejava.pro;

public class javaCreatePro {
public static String test(int num) {
return num + "的平方为: " + num * num;
}
}

create or replace and compile java source named "PF" as
/**
* 通过JAVA类来 创建Oracle存储过程
*/
package org.oraclejava.pro;

public class javaCreatePro {
public static String test(int num) {
return num + "的平方为: " + num * num;
}
}

Ⅲ、将JAVA类中的方法test创建为一个Oracle函数方法
查看复制到剪切板打印
create or replace function PF_FUN(name integer) return varchar2 as language java name 'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer) return java.lang.String';

create or replace function PF_FUN(name integer) return varchar2 as language java name 'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer) return java.lang.String';

Ⅳ、在控制台直接调用创建的Oracle函数

select PF_FUN(10) from dual;

Ⅴ、输出结果
10的平方为:100

以上即是在Oracle中的SQL PLUS中使用JAVA程序来产生Oracle存储过程的演示例子,演示了其基本语法的实现跟简单的功能实现,可以看出在JAVA跟Oracle之间存在很多有趣的用法,因为oracle中有java虚拟机,使得Oracle变得更加有趣更加丰富多彩。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值