熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

在Java中調用Oracle包中的過程

2013-11-13 22:15:18  來源: Oracle 

  先在oracle中編寫測試過程

  首選建一個測試表

   Create table
create table BOOK
(
  BOOKID    VARCHAR() not null
  BOOKNAME  VARCHAR() not null
  PUBLISHER VARCHAR() not null
  PRICE     VARCHAR() null
)

  編寫ORACLE測試過程

  CREATE OR REPLACE PACKAGE pkg_test
AS
   TYPE myrctype IS REF CURSOR;

  PROCEDURE get (p_id VARCHAR p_str OUT VARCHAR p_rc OUT myrctype);
END pkg_test;

  /

  CREATE OR REPLACE PACKAGE BODY pkg_test
AS
   PROCEDURE get (p_id VARCHAR p_str OUT VARCHARp_rc OUT myrctype)
   IS
      sqlstr   VARCHAR ();
   BEGIN
      p_str := Hellomay~;
      IF p_id = all THEN
         OPEN p_rc FOR
            SELECT *
              FROM BOOK;
      ELSE
         sqlstr :=
            select *
           from BOOK where BOOKID=:w_id;
         OPEN p_rc FOR sqlstr USING p_id;
      END IF;
   END get;
END pkg_test;

  /

  在這裡我們建立了一個輸入參數為普通類型兩個輸出參數其中一個為普通VARCHAR另一個為特殊的記錄集類型

  (注在數據庫端測試一下這個過程以確保沒有問題開始下面的操作~

  編寫JAVA代碼測試過程

  /*
 * 創建日期:
 */
package JDBC;

  /**
 * 作者:may
 * 時間:::
 */
import javasql*;
import oraclejdbcdriver*;

  public class proctest {
  
  public static void main(String[] args) {
   proctest pc = new proctest();
   pcShowContent();
   }
 
  
  String sDBDriver=oraclejdbcdriverOracleDriver;
  String sConnStr=jdbc:oracle:thin:@::ORADB;
  
  
  Connection  connect=null;
  ResultSet rs = null;
  
  public proctest(){
   try{
    ClassforName(sDBDriver);
   }
   catch(ClassNotFoundException e){
    Systemerrprintln(egetMessage());
   }
  }
  public ResultSet ShowContent()
   
  {
   
   try{
    
    connect = DriverManagergetConnection(sConnStrSHUIBJSHUIBJ);
    CallableStatement  stmt = connectprepareCall({call PKG_TESTGET(???)});
    
    stmtsetString(all);  //輸入參數
    
    stmtregisterOutParameter(TypesCHAR); //輸出參數為普通參數
    stmtregisterOutParameter(OracleTypesCURSOR); //輸出參數為結果集參數
     
    stmtexecuteQuery();
    
    rs = ((OracleCallableStatement) stmt)getCursor(); //得到輸出結果集參數
    
    ResultSetMetaData rsmd = rsgetMetaData();
    int numberOfColumns = rsmdgetColumnCount();

  String str = stmtgetString();
    
  
    Systemoutprintln(第二個參數為:+str);
    Systemoutprintln(結果集列數+numberOfColumns);
    
    //列出結果集中的記錄
    ResultSetMetaData md = rsgetMetaData();
    int nColumns = mdgetColumnCount();
    for (int i=;i<=nColumns;i++){
     Systemoutprint(mdgetColumnName(i)+((i==nColumns)?\n:\t));
     if(i==) Systemoutprint(\t);
    }
    
    while (rsnext()){
     for(int i=;i<=nColumns;i++){
     Systemoutprint(rsgetString(i)+((i==nColumns)?\n:\t));
    }
     
    }
   }
   catch(SQLException ex){
    Systemerrprintln(exgetMessage()+連數據庫有問題!);
   }
   
   return rs;
   
  }
  
}
 
 輸出結果為

  第二個參數為:Hellomay~
結果集列數
BOOKID BOOKNAME  PUBLISHER PRICE
 jsp 應用開發詳解 電子工業出版社 
  uml參考手冊 機械工業出版社 


From:http://tw.wingwit.com/Article/program/Oracle/201311/18612.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.