在大型數據庫系統中,有兩個很重要作用的功能,那就是存儲過程和觸發器。在數據庫系統中無論是存儲過程還是觸發器,都是通過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();
}
}
Ⅱ、帶輸出參數的情況
過程名稱為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();
}
}
以上即是在JAVA中調用Oracle存儲過程的最簡單的實例,接下來將介紹有關JAVA跟Oracle存儲過程的其他方面內容。