日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何在Oracle中使用Java存儲(chǔ)過(guò)程(詳解)

其實(shí),這篇短文,我早就應(yīng)該寫了。因?yàn)?,Java存儲(chǔ)過(guò)程今后在各大數(shù)據(jù)庫(kù)廠商中越來(lái)越流行,功能也越來(lái)越強(qiáng)大。這里以O(shè)racle為例,介紹一下java存儲(chǔ)過(guò)程的具體用法。

創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元芒市做網(wǎng)站,已為上家服務(wù),為芒市各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

一、如何創(chuàng)建java存儲(chǔ)過(guò)程?

通常有三種方法來(lái)創(chuàng)建java存儲(chǔ)過(guò)程。

1. 使用oracle的sql語(yǔ)句來(lái)創(chuàng)建:

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

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

 
 
 
  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 已創(chuàng)建。
  13. SQL> show errors java source "javademo1"
  14. 沒(méi)有錯(cuò)誤。
  15. SQL> create or replace procedure javademo1
  16.   2  as
  17.   3  language java name 'JavaDemo1.main(java.lang.String[])';
  18.   4  /
  19. 過(guò)程已創(chuàng)建。
  20. SQL> set serveroutput on
  21. SQL> call javademo1();
  22. 調(diào)用完成。
  23. SQL> call dbms_java.set_output(5000);
  24. 調(diào)用完成。
  25. SQL> call javademo1();
  26. hello, java demo1
  27. 調(diào)用完成。
  28. SQL> call javademo1();
  29. hello, java demo1
  30. 調(diào)用完成。

2. 使用外部class文件來(lái)裝載創(chuàng)建

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. 授權(quán)成功。
  10. SQL> conn scott/tiger@iihero.oracledb
  11. 已連接。
  12. SQL> create or   replace   directory   test_dir   as  'd:/oracle';
  13. 目錄已創(chuàng)建。
  14. SQL> create or replace java class using bfile(test_dir, 'OracleJavaProc.CLASS')
  15.   2  /
  16. Java 已創(chuàng)建。
  17. SQL> create or replace procedure testjavaproc as language java name 'OracleJavaProc.main(java.lang.String[])';
  18.   2  /
  19. 過(guò)程已創(chuàng)建。
  20. SQL> call testjavaproc();
  21. 調(diào)用完成。
  22. SQL> execute testjavaproc;
  23. PL/SQL 過(guò)程已成功完成。
  24. SQL> set serveroutput on size 5000
  25. SQL> call dbms_java.set_output(5000);
  26. 調(diào)用完成。
  27. SQL> execute testjavaproc;
  28. It's a Java Oracle procedure.

3. 我推薦的一種方法,直接使用loadjava命令遠(yuǎn)程裝載并創(chuàng)建。
先創(chuàng)建一個(gè)類, 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命令將其裝載到服務(wù)器端并編譯:

 
 
 
  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

查詢一下?tīng)顟B(tài):

 
 
 
  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

測(cè)試一下存儲(chǔ)過(guò)程:

 
 
 
  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. 過(guò)程已創(chuàng)建。
  5. SQL> set serveroutput on size 2000
  6. SQL> call dbms_java.set_output(2000);
  7. 調(diào)用完成。
  8. SQL> execute add_salgrade(6, 10000, 15000);
  9. Creating new salgrade for EMPLOYEE...
  10. PL/SQL 過(guò)程已成功完成。
  11. SQL> select * from salgrade where grade=6;
  12.      GRADE      LOSAL      HISAL
  13. ---------- ---------- ----------
  14.          6      10000      15000

二、如何更新你已經(jīng)編寫的java存儲(chǔ)過(guò)程?

假如要往類OracleJavaProc里添加一個(gè)存儲(chǔ)過(guò)程方法,如何開發(fā)?
正確的步驟應(yīng)該是先dropjava, 改程序,再loadjava。

e.g.修改OracleJavaProc類內(nèi)容如下:

 
 
 
  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.    
  27.    public static int getHiSal(int grade)
  28.    {
  29.     try {
  30.         Connection conn =
  31.           DriverManager.getConnection("jdbc:default:connection:");
  32.         String sql = "SELECT hisal FROM salgrade WHERE grade = ?";
  33.         PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade);
  34.         ResultSet rset = pstmt.executeQuery();
  35.         int res = 0;
  36.         if (rset.next())
  37.         {
  38.             res = rset.getInt(1);
  39.         }
  40.         rset.close();
  41.         return res;
  42.        }
  43.     catch (SQLException e) 
  44.     {
  45.         System.err.println("ERROR! Querying Salgrade: " 
  46.            + e.getMessage());
  47.           return -1;
  48.     }    
  49.    }
  50.       
  51. }

如何更新呢?

 
 
 
  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

后邊的應(yīng)用示例:

 
 
 
  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. 函數(shù)已創(chuàng)建。
  5. SQL> set serveroutput on size 2000
  6. SQL> call dbms_java.set_output(2000);
  7. 調(diào)用完成。
  8. SQL> select query_hisal(5) from dual;
  9. QUERY_HISAL(5)
  10. --------------
  11.           9999

全文完!

用法個(gè)人見(jiàn)解:不要手動(dòng)drop java source, 不要手動(dòng)drop procedure。


當(dāng)前名稱:如何在Oracle中使用Java存儲(chǔ)過(guò)程(詳解)
鏈接地址:http://m.5511xx.com/article/dpdodho.html