歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 在Java語言中訪問存儲過程和存儲函數

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

日期:2017/3/1 10:25:57   编辑:Linux編程

一 引言:

學習了怎麼創建和使用存儲過程和存儲函數之後呢,我們來學習如何在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. 在java中調用上面的存儲過程,代碼為:
  6. public static void testprocedure() {
  7. try {
  8. // 創建callabStatement對象來調用存儲過程 通過占位符傳遞的是intout的參數,
  9. CallableStatement cas = conn
  10. .prepareCall("{call selectEmp(?,?,?,?)}");
  11. // 從1開始
  12. int index = 1;
  13. // 為占位符賦值 輸入參數賦值
  14. cas.setInt(index++, 7369);
  15. // 為輸出參數賦值
  16. cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);
  17. cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);
  18. cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);
  19. // 執行操作 返回的不是ResultSet 如果返回的是ResultSet 則為true,返回的是空則為false
  20. boolean flag = cas.execute();
  21. System.out.println(flag);
  22. // 判斷
  23. if (!flag) {
  24. // 獲取值
  25. String ename = cas.getString(2);
  26. String job = cas.getString(3);
  27. int sal = cas.getInt(4);
  28. System.out.println(ename);
  29. System.out.println(job);
  30. System.out.println(sal);
  31. }
  32. } catch (SQLException e) {
  33. // TODO Auto-generated catch block
  34. e.printStackTrace();
  35. }
  36. }
Copyright © Linux教程網 All Rights Reserved