在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器。在数据库系统中无论是存储过程还是触发器,都是通过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个,数据类型为整形数据

Java代码 

 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个,数据类型为整形数据,返回值为整形类型


Java代码 

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(); 

} 

}