1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        如何在Oracle中使用Java存儲過程(詳解)

        發布時間:  2012/5/28 11:57:22

        一、如何創建java存儲過程?

        通常有三種方法來創建java存儲過程。

        1. 使用oracle的sql語句來創建:

        e.g. 使用create or replace and compile java source named "<name>" as

        后邊跟上java源程序。要求類的方法必須是public static的,才能用于存儲過程。

        1. SQL> create or replace and compile java source named "javademo1"
        2. 2 as
        3. 3 import java.sql.*;
        4. 4 public class JavaDemo1
        5. 5 {
        6. 6 public static void main(String[] argv)
        7. 7 {
        8. 8 System.out.println("hello, java demo1");
        9. 9 }
        10. 10 }
        11. 11 /
        12. Java 已創建。
        13. SQL> show errors java source "javademo1"
        14. 沒有錯誤。
        15. SQL> create or replace procedure javademo1
        16. 2 as
        17. 3 language java name 'JavaDemo1.main(java.lang.String[])';
        18. 4 /
        19. 過程已創建。
        20. SQL> set serveroutput on
        21. SQL> call javademo1();
        22. 調用完成。
        23. SQL> call dbms_java.set_output(5000);
        24. 調用完成。
        25. SQL> call javademo1();
        26. hello, java demo1
        27. 調用完成。
        28. SQL> call javademo1();
        29. hello, java demo1
        30. 調用完成。

        2. 使用外部class文件來裝載創建

        e.g. 這里既然用到了外部文件,必然要將class文件放到oracle Server的某一目錄下邊。

        1. public class OracleJavaProc
        2. {
        3. public static void main(String[] argv)
        4. {
        5. System.out.println("It's a Java Oracle procedure.");
        6. }
        7. }
        8. SQL> grant create any directory to scott;
        9. 授權成功。
        10. SQL> conn scott/tiger@iihero.oracledb
        11. 已連接。
        12. SQL> create or replace directory test_dir as 'd:/oracle';
        13. 目錄已創建。
        14. SQL> create or replace java class using bfile(test_dir, 'OracleJavaProc.CLASS')
        15. 2 /
        16. Java 已創建。
        17. SQL> create or replace procedure testjavaproc as language java name 'OracleJavaProc.main(java.lang.String[])';
        18. 2 /
        19. 過程已創建。
        20. SQL> call testjavaproc();
        21. 調用完成。
        22. SQL> execute testjavaproc;
        23. PL/SQL 過程已成功完成。
        24. SQL> set serveroutput on size 5000
        25. SQL> call dbms_java.set_output(5000);
        26. 調用完成。
        27. SQL> execute testjavaproc;
        28. It's a Java Oracle procedure.

        3. 我推薦的一種方法,直接使用loadjava命令遠程裝載并創建。
        先創建一個類, e.g.

        1. import java.sql.*;
        2. import oracle.jdbc.*;
        3. public class OracleJavaProc {
        4. //Add a salgrade to the database.
        5. public static void addSalGrade(int grade, int losal, int hisal) {
        6. System.out.println("Creating new salgrade for EMPLOYEE...");
        7. try {
        8. Connection conn =
        9. DriverManager.getConnection("jdbc:default:connection:");
        10. String sql =
        11. "INSERT INTO salgrade " +
        12. "(GRADE,LOSAL,HISAL) " +
        13. "VALUES(?,?,?)";
        14. PreparedStatement pstmt = conn.prepareStatement(sql);
        15. pstmt.setInt(1,grade);
        16. pstmt.setInt(2,losal);
        17. pstmt.setInt(3,hisal);
        18. pstmt.executeUpdate();
        19. pstmt.close();
        20. }
        21. catch(SQLException e) {
        22. System.err.println("ERROR! Adding Salgrade: "
        23. + e.getMessage());
        24. }
        25. }
        26. }

        使用loadjava命令將其裝載到服務器端并編譯:

        1. D:eclipse3.1workspacedbtest>loadjava -u scott/tiger@iihero.oracledb -v -resolve Or
        2. acleJavaProc.java
        3. arguments: '-u' 'scott/tiger@iihero.oracledb '-v' '-resolve' 'OracleJavaProc.java'
        4. creating : source OracleJavaProc
        5. loading : source OracleJavaProc
        6. resolving: source OracleJavaProc

        查詢一下狀態:

        1. 連接到:
        2. Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
        3. With the Partitioning, OLAP and Oracle Data Mining options
        4. JServer Release 9.2.0.1.0 - Production
        5. SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE 'JAVA%';
        6. OBJECT_NAME
        7. --------------------------------------------------------------------------------
        8. OBJECT_TYPE STATUS
        9. ------------------------------------ --------------
        10. OracleJavaProc
        11. JAVA CLASS VALID
        12. OracleJavaProc
        13. JAVA SOURCE VALID

        測試一下存儲過程:

        1. SQL> create or replace procedure add_salgrade(id number, losal number, hisal num
        2. ber) as language java name 'OracleJavaProc.addSalGrade(int, int, int)';
        3. 2 /
        4. 過程已創建。
        5. SQL> set serveroutput on size 2000
        6. SQL> call dbms_java.set_output(2000);
        7. 調用完成。
        8. SQL> execute add_salgrade(6, 10000, 15000);
        9. Creating new salgrade for EMPLOYEE...
        10. PL/SQL 過程已成功完成。
        11. SQL> select * from salgrade where grade=6;
        12. GRADE LOSAL HISAL
        13. ---------- ---------- ----------
        14. 6 10000 15000

        二、如何更新你已經編寫的java存儲過程?

        假如要往類OracleJavaProc里添加一個存儲過程方法,如何開發?
        正確的步驟應該是先dropjava, 改程序,再loadjava。

        e.g.修改OracleJavaProc類內容如下:

        1. import java.sql.*;
        2. import oracle.jdbc.*;
        3. public class OracleJavaProc {
        4. // Add a salgrade to the database.
        5. public static void addSalGrade(int grade, int losal, int hisal) {
        6. System.out.println("Creating new salgrade for EMPLOYEE...");
        7. try {
        8. Connection conn =
        9. DriverManager.getConnection("jdbc:default:connection:");
        10. String sql =
        11. "INSERT INTO salgrade " +
        12. "(GRADE,LOSAL,HISAL) " +
        13. "VALUES(?,?,?)";
        14. PreparedStatement pstmt = conn.prepareStatement(sql);
        15. pstmt.setInt(1,grade);
        16. pstmt.setInt(2,losal);
        17. pstmt.setInt(3,hisal);
        18. pstmt.executeUpdate();
        19. pstmt.close();
        20. }
        21. catch(SQLException e) {
        22. System.err.println("ERROR! Adding Salgrade: "
        23. + e.getMessage());
        24. }
        25. }
        26. public static int getHiSal(int grade)
        27. {
        28. try {
        29. Connection conn =
        30. DriverManager.getConnection("jdbc:default:connection:");
        31. String sql = "SELECT hisal FROM salgrade WHERE grade = ?";
        32. PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade);
        33. ResultSet rset = pstmt.executeQuery();
        34. int res = 0;
        35. if (rset.next())
        36. {
        37. res = rset.getInt(1);
        38. }
        39. rset.close();
        40. return res;
        41. }
        42. catch (SQLException e)
        43. {
        44. System.err.println("ERROR! Querying Salgrade: "
        45. + e.getMessage());
        46. return -1;
        47. }
        48. }
        49. }

        如何更新呢?

        1. D:eclipse3.1workspacedbtest>dropjava -u scott -v OracleJavaProc
        2. D:/tiger@iihero.oracledbeclipse3.1workspacedbtest>loadjava -u scott -v -resolve Or
        3. acleJavaProc/tiger@iihero.oracledb.java
        4. arguments: '-u' 'scott/tiger@iihero.oracledb' '-v' '-resolve' 'OracleJavaProc.java'
        5. creating : source OracleJavaProc
        6. loading : source OracleJavaProc
        7. resolving: source OracleJavaProc

        后邊的應用示例:

        1. SQL> create or replace function query_hisal(grade number) return number as langu
        2. age java name 'OracleJavaProc.getHiSal(int) return int';
        3. 2 /
        4. 函數已創建。
        5. SQL> set serveroutput on size 2000
        6. SQL> call dbms_java.set_output(2000);
        7. 調用完成。
        8. SQL> select query_hisal(5) from dual;
        9. QUERY_HISAL(5)
        10. --------------
        11. 9999

        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线