Oracle中怎么調(diào)用Java存儲過程

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Oracle中怎么調(diào)用Java存儲過程,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的吳起網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

通常有三種方法來創(chuàng)建java存儲過程。

1. 使用oracle的sql語句來創(chuàng)建:

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

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

SQL> create or replace and compile java source named "javademo1"   2  as   3  import java.sql.*;    4  public class JavaDemo1    5  {    6  public static void main(String[] argv)    7  {    8  System.out.println("hello, java demo1");    9  }   10  }   11  /   Java 已創(chuàng)建。   SQL> show errors java source "javademo1" 沒有錯(cuò)誤。   SQL> create or replace procedure javademo1    2  as   3  language java name 'JavaDemo1.main(java.lang.String[])';    4  /   過程已創(chuàng)建。   SQL> set serveroutput on SQL> call javademo1();   調(diào)用完成。   SQL> call dbms_java.set_output(5000);   調(diào)用完成。   SQL> call javademo1();  hello, java demo1   調(diào)用完成。   SQL> call javademo1();  hello, java demo1  調(diào)用完成。

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

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

public class OracleJavaProc  {      public static void main(String[] argv)      {          System.out.println("It's a Java Oracle procedure.");      }  }    SQL> grant create any directory to scott;   授權(quán)成功。   SQL> conn scott/tiger@iihero.oracledb  已連接。  SQL> create or   replace   directory   test_dir   as  'd:/oracle';   目錄已創(chuàng)建。   SQL> create or replace java class using bfile(test_dir, 'OracleJavaProc.CLASS')    2  /   Java 已創(chuàng)建。   SQL> create or replace procedure testjavaproc as language java name 'OracleJavaProc.main(java.lang.String[])';    2  /   過程已創(chuàng)建。   SQL> call testjavaproc();   調(diào)用完成。   SQL> execute testjavaproc;   PL/SQL 過程已成功完成。   SQL> set serveroutput on size 5000  SQL> call dbms_java.set_output(5000);   調(diào)用完成。   SQL> execute testjavaproc;  It's a Java Oracle procedure.

3. 我推薦的一種方法,直接使用loadjava命令遠(yuǎn)程裝載并創(chuàng)建。
先創(chuàng)建一個(gè)類, e.g.

import java.sql.*;  import oracle.jdbc.*;   public class OracleJavaProc {      //Add a salgrade to the database.     public static void addSalGrade(int grade, int losal, int hisal) {         System.out.println("Creating new salgrade for EMPLOYEE...");         try {           Connection conn =              DriverManager.getConnection("jdbc:default:connection:");            String sql =              "INSERT INTO salgrade " +              "(GRADE,LOSAL,HISAL) " +              "VALUES(?,?,?)";           PreparedStatement pstmt = conn.prepareStatement(sql);           pstmt.setInt(1,grade);           pstmt.setInt(2,losal);           pstmt.setInt(3,hisal);           pstmt.executeUpdate();           pstmt.close();           }        catch(SQLException e) {           System.err.println("ERROR! Adding Salgrade: "              + e.getMessage());           }     }  }

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

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

查詢一下狀態(tài):

連接到:  Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production  With the Partitioning, OLAP and Oracle Data Mining options  JServer Release 9.2.0.1.0 - Production   SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE 'JAVA%';   OBJECT_NAME  --------------------------------------------------------------------------------   OBJECT_TYPE                          STATUS  ------------------------------------ --------------  OracleJavaProc  JAVA CLASS                           VALID   OracleJavaProc  JAVA SOURCE                          VALID

測試一下存儲過程:

SQL> create or replace procedure add_salgrade(id number, losal number, hisal num  ber) as language java name 'OracleJavaProc.addSalGrade(int, int, int)';    2  /   過程已創(chuàng)建。   SQL> set serveroutput on size 2000  SQL> call dbms_java.set_output(2000);   調(diào)用完成。   SQL> execute add_salgrade(6, 10000, 15000);  Creating new salgrade for EMPLOYEE...   PL/SQL 過程已成功完成。   SQL> select * from salgrade where grade=6;        GRADE      LOSAL      HISAL  ---------- ---------- ----------           6      10000      15000

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

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

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

import java.sql.*;  import oracle.jdbc.*;   public class OracleJavaProc {      // Add a salgrade to the database.     public static void addSalGrade(int grade, int losal, int hisal) {         System.out.println("Creating new salgrade for EMPLOYEE...");         try {           Connection conn =              DriverManager.getConnection("jdbc:default:connection:");            String sql =              "INSERT INTO salgrade " +              "(GRADE,LOSAL,HISAL) " +              "VALUES(?,?,?)";           PreparedStatement pstmt = conn.prepareStatement(sql);           pstmt.setInt(1,grade);           pstmt.setInt(2,losal);           pstmt.setInt(3,hisal);           pstmt.executeUpdate();           pstmt.close();           }        catch(SQLException e) {           System.err.println("ERROR! Adding Salgrade: "              + e.getMessage());           }     }          public static int getHiSal(int grade)     {      try {          Connection conn =            DriverManager.getConnection("jdbc:default:connection:");          String sql = "SELECT hisal FROM salgrade WHERE grade = ?";          PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade);          ResultSet rset = pstmt.executeQuery();          int res = 0;          if (rset.next())          {              res = rset.getInt(1);          }          rset.close();          return res;         }      catch (SQLException e)       {          System.err.println("ERROR! Querying Salgrade: "              + e.getMessage());            return -1;      }         }          }

如何更新呢?

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

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

SQL> create or replace function query_hisal(grade number) return number as langu  age java name 'OracleJavaProc.getHiSal(int) return int';    2  /   函數(shù)已創(chuàng)建。   SQL> set serveroutput on size 2000  SQL> call dbms_java.set_output(2000);   調(diào)用完成。  SQL> select query_hisal(5) from dual;   QUERY_HISAL(5)  --------------            9999

上述就是小編為大家分享的Oracle中怎么調(diào)用Java存儲過程了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁標(biāo)題:Oracle中怎么調(diào)用Java存儲過程
瀏覽路徑:http://bm7419.com/article48/geiohp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、Google、網(wǎng)站導(dǎo)航企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)