一 引言:
學習了怎麼創建和使用存儲過程和存儲函數之後呢,我們來學習如何在java環境下來訪問Oracle的存儲過程和存儲函數了。
在訪問之前首先要導入oracle的驅動,導入的驅動在安裝的oracle路徑下的此目錄下找:oracle\product\10.2.0\db_1\jdbc\lib\ojbc14.jar,好,這樣,我們就有了oracle驅動,來建一個java類來測試吧!
二 練練吧 -- 存儲過程的調用!
1. 首先要先載入驅動來和oracle數據庫連接:
- private static Connection conn;
- static {
- try {
- // 第一步:加載驅動
- Class.forName("oracle.jdbc.driver.OracleDriver");
- // 得到連接對象 test1是用戶的名字
- conn = DriverManager.getConnection(
- "jdbc:oracle:thin:@localhost:1521:orcl", "test1", "test1");
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
2.我們來調用第一種存儲過程,存儲過程的內容為:
- create or replace procedure selectEmp(emp_no in number, ename out varchar2,job out varchar2 ,sal out number) is
- begin
- select ename,job,sal into ename,job,sal from emp where empno=emp_no;
- end selectEmp;
-
- 在java中調用上面的存儲過程,代碼為:
- public static void testprocedure() {
- try {
- // 創建callabStatement對象來調用存儲過程 通過占位符傳遞的是int和out的參數,
- CallableStatement cas = conn
- .prepareCall("{call selectEmp(?,?,?,?)}");
- // 從1開始
- int index = 1;
- // 為占位符賦值 輸入參數賦值
- cas.setInt(index++, 7369);
- // 為輸出參數賦值
- cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);
- cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);
- cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);
-
- // 執行操作 返回的不是ResultSet 如果返回的是ResultSet 則為true,返回的是空則為false
- boolean flag = cas.execute();
-
- System.out.println(flag);
- // 判斷
- if (!flag) {
- // 獲取值
- String ename = cas.getString(2);
- String job = cas.getString(3);
- int sal = cas.getInt(4);
- System.out.println(ename);
- System.out.println(job);
- System.out.println(sal);
- }
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }