歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

在Java語言中訪問存儲過程和存儲函數

一   引言: 

學習了怎麼創建和使用存儲過程和存儲函數之後呢,我們來學習如何在java環境下來訪問Oracle的存儲過程和存儲函數了。 

在訪問之前首先要導入oracle的驅動,導入的驅動在安裝的oracle路徑下的此目錄下找:oracle\product\10.2.0\db_1\jdbc\lib\ojbc14.jar,好,這樣,我們就有了oracle驅動,來建一個java類來測試吧! 

二  練練吧  -- 存儲過程的調用!  

1.  首先要先載入驅動來和oracle數據庫連接: 

  1. private static Connection conn;  
  2. static {  
  3.         try {  
  4.             // 第一步:加載驅動  
  5.             Class.forName("oracle.jdbc.driver.OracleDriver");  
  6.             // 得到連接對象  test1是用戶的名字  
  7.             conn = DriverManager.getConnection(  
  8.                     "jdbc:oracle:thin:@localhost:1521:orcl""test1""test1");  
  9.         } catch (ClassNotFoundException e) {  
  10.             // TODO Auto-generated catch block  
  11.             e.printStackTrace();  
  12.         } catch (SQLException e) {  
  13.             // TODO Auto-generated catch block  
  14.             e.printStackTrace();  
  15.         }  
  16.     }  

2.我們來調用第一種存儲過程,存儲過程的內容為: 

  1.  create or replace procedure selectEmp(emp_no in number, ename out varchar2,job out varchar2 ,sal out number) is  
  2. begin  
  3.   select ename,job,sal into ename,job,sal from emp where empno=emp_no;  
  4. end selectEmp;  
  5.   
  6. 在java中調用上面的存儲過程,代碼為:  
  7. public static void testprocedure() {  
  8.         try {  
  9.             // 創建callabStatement對象來調用存儲過程 通過占位符傳遞的是intout的參數,  
  10.             CallableStatement cas = conn  
  11.                     .prepareCall("{call selectEmp(?,?,?,?)}");  
  12.             // 從1開始  
  13.             int index = 1;  
  14.             // 為占位符賦值 輸入參數賦值  
  15.             cas.setInt(index++, 7369);  
  16.             // 為輸出參數賦值  
  17.             cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);  
  18.             cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);  
  19.             cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);  
  20.   
  21.             // 執行操作 返回的不是ResultSet 如果返回的是ResultSet 則為true,返回的是空則為false  
  22.             boolean flag = cas.execute();  
  23.   
  24.             System.out.println(flag);  
  25.             // 判斷  
  26.             if (!flag) {  
  27.                 // 獲取值  
  28.                 String ename = cas.getString(2);  
  29.                 String job = cas.getString(3);  
  30.                 int sal = cas.getInt(4);  
  31.                 System.out.println(ename);  
  32.                 System.out.println(job);  
  33.                 System.out.println(sal);  
  34.             }  
  35.         } catch (SQLException e) {  
  36.             // TODO Auto-generated catch block  
  37.             e.printStackTrace();  
  38.         }  
  39.     }  
Copyright © Linux教程網 All Rights Reserved