posts - 78,  comments - 48,  trackbacks - 0
          ???

          ?
          Oracle8i中使用Java語言來開發存儲過程
          本篇文章來源與時代朝陽數據庫(原曉通數據庫)培訓部Oracle?資料庫。
          在Oracle8i之前,開發人員只能使用PL/SQL來開發存儲過程。而在Oracle8i之中,不僅可以使用原有的PL/SQL開發存儲過程,而且也可以使用Java語言來開發存儲過程。本篇文章將簡單介紹關于這方面的知識,包括以下內容:
          ?
          l???????? 存儲過程簡介;
          l???????? Java存儲過程
          l???????? Java存儲過程的開發步驟
          l???????? 使用Java開發過程;
          l???????? 使用Java開發函數;
          l???????? 使用Java開發包;
          l???????? 使用Java開發觸發器;
          l???????? 使用Java開發對象方法;
          l???????? 使用JDeveloper開發JSP。 存儲過程簡介
          存儲過程是存儲在數據庫中的一段存儲程序。當創建存儲過程時,系統會對其進行編譯,并將執行代碼存儲到數據庫中。
          ?
          1.???????? 設計存儲過程的方針
          ?
          l???????? 在定義存儲過程時,要使用其完成單一、相對集中的任務。
          l???????? 在定義存儲過程時,不要定義已經由其它特征所提供功能的過程。例如,不要定義強制數據完整性的過程(使用完整性約束)。
          ?
          2.???????? 存儲過程的優點
          1)??????? 安全性
          ?
          當創建了存儲過程之后,可以將執行該過程的權限授予其它用戶,從而使得他可以執行特定的數據庫操作,而不能訪問其它模式對象(例如表)。例如,你可以將執行過程(更新表)的權限授予其它用戶,但不授予它們直接訪問該表的權限。
          ?
          2)??????? 性能
          ?
          l???????? 存儲過程只被發送到數據庫一次,相對于SQL語句或PL/SQL塊而言,其網絡通信量更小。
          l???????? 當調用存儲過程時,數據庫會直接運行該存儲過程,無需進行編譯。相對于SQL語句或PL/SQL塊而言,其執行速度更快。
          ?
          3)??????? 內存分配
          ?
          存儲過程充分利用了Oracle共享內存的能力。在將存儲過程裝載到內存中后,多個用戶可以同時調用該存儲過程,從而降低了應用對Oracle的實際內存需求。
          ?
          4)??????? 生產力
          ?
          存儲過程提高了開發生產力。通過將公共集合編寫為存儲過程,避免了冗余代碼,從而提高了開發生產力。例如,我們可以編寫用于插入、更新、刪除AUTHS表的過程,此后應用可以直接調用這些過程,而無需重寫SQL語句。當管理數據的方法發生變化時,只需要修改過程,而不需要對應用進行任何修改。 Java存儲過程
          在以前的Oracle版本中,開發存儲過程是通過PL/SQL來完成的。而在Oracle8i版本中,我們不僅可以使用PL/SQL開發存儲過程,而且還可以使用Java語言來開發存儲過程。
          ?
          1.???????? PL/SQL與Java存儲過程比較
          ?
          與PL/SQL相比,使用Java語言開發存儲過程有以下優點:
          ?
          l???????? Java語言具有更強大的運算能力,提供了更多的運算方法。當要完成進行復雜運算的存儲過程時,使用JSP將是你最好的選擇。
          l???????? PL/SQL只能用于Oracle數據庫,而Java語言可以應用于更多的數據庫系統(如Sybase、DB2、Informix等等),所以Java存儲過程將具有更好的兼容性、可移植性。
          ?
          2.???????? JSP分類
          Java存儲過程包括過程、函數、觸發器以及對象方法四種類型。
          ?
          3.???????? 調用JSP的四種方法
          ?
          l???????? CALL語法;
          l???????? DML語句;
          l???????? PL/SQL塊、子程序、包;
          l???????? 由觸發器隱含調用。 Java存儲過程的開發步驟
          1.???????? 編寫Java源代碼
          ?
          當開發Java存儲過程時,首先應該編寫Java源代碼。如下圖所示:
          注意事項:
          ?
          l????????? 當以public方式聲明類時,類名必須與其文件名完全一致。
          l????????? 只有public static方法可以作為Java存儲過程。
          ?
          2.???????? 裝載Java代碼及類到Oracle8i數據庫中
          在編寫了Java源代碼之后,接下來應該將Java代碼及相應的Java類裝載到Oracle8i數據庫中。如下圖所示:
          裝載Java代碼及類到RDBMS有以下兩種方法:
          ?
          l???????? 使用loadjava工具,通過該工具可以快速裝載Java源代碼(.java)、Java二進制代碼(.class)以及Java打包文件(.jar)。
          l???????? 使用CREATE Java、ALTER Java裝載Java代碼。
          ?
          其中,前一種方法相對簡單,并且我們推薦你使用這種方法。
          ?
          3.???????? 生成調用說明
          ?
          在裝載了Java類之后,接下來應該生成對public static方法的調用說明,最終完成Java存儲過程的開發工作。如下圖所示:
          ?
          完成上述步驟之后,就完成了Java存儲過程的開發工作,然后就可以調用并執行該Java存儲過程了。 使用Java開發過程
          過程用于執行某種操作。需要注意的是,過程所對應的Java方法返回值必須為空(void)。本節以創建用于插入、修改和刪除AUTHS表的JSP為例,說明使用Java開發過程的方法。如下圖所示:
          下面講述完成上述任務的方法及過程:
          ?
          1.???????? 編寫Java源代碼
          ?
          程序清單如下(manipulate_auths.java):
          ?
          /* 導入Java類 */
          import java.sql.*;
          import java.io.*;
          import oracle.jdbc.driver.*;
          ?
          /* 主類 */
          public class manipulate_auths {
          ?
          ? public static void insert_auths
          ??? (String code,String name,int sex,String birthdate,String entry_date_time)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          String sql = "INSERT INTO auths
          ?(author_code,name,sex,birthdate,entry_date_time) " +
          ???????????????? "VALUES (?,?,?,?,?)";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, code);
          ????? pstmt.setString(2, name);
          ????? pstmt.setInt(3, sex);
          ????? pstmt.setString(4, birthdate);
          ????? pstmt.setString(5, entry_date_time);
          ????? /* 執行動態SQL語句 */
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) { }
          ? }
          ?
          ? public static void delete_auths (String code)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ??? String sql = "DELETE FROM auths? WHERE author_code = ?";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, code);
          ????? /* 執行動態SQL語句 */
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) { }
          ? }
          ?
          ? public static void modify_salary (String code,float salary)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ??? String sql = "UPDATE auths SET salary = ? WHERE author_code = ?";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setFloat(1, salary);
          ????? pstmt.setString(2, code);
          ????? /* 執行動態SQL語句 */
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) { }
          ? }
          }
          2.???????? 裝載Java代碼及類到Oracle8i數據庫中
          ?
          在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數據庫中了。下面是完成這項任務的方法:
          ?

          ?
          3.???????? 發行Java,生成調用說明
          ?
          在裝載了Java類后,就可以發行該Java類,并生成調用其方法的過程說明了。下面是完成該項任務的方法:
          ?




          ?
          4.???????? 調用JSP
          在生成了調用Java方法的過程說明之后,我們就可以調用JSP了。例如:
          ?

          使用Java開發函數
          函數用于返回特定數據。本節將通過創建用于返回作者的文章標題,以及某種類型的文章個數為例,說明使用Java開發函數的方法。如下圖所示:
          ?
          ?
          下面講述完成上述任務的方法和過程。
          ?
          1.???????? 編寫Java源代碼
          ?
          程序清單如下(query_article.java):
          ?
          /* 導入Java類 */
          import java.sql.*;
          import java.io.*;
          import oracle.jdbc.driver.*;
          ?
          /* 主類 */
          public class query_article {
          ?
          ? public static String auths_article(String code)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ??? String sql1 = "SELECT name FROM auths WHERE author_code=?";
          ??? String sql2 = "SELECT title FROM article WHERE author_code=?";
          ??? /* 聲明并初始化auths_article變量 */
          ??? String auths_article = new String();
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql1);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, code);
          ????? /* 執行查詢,并將結果保存到結果集中 */
          ????? ResultSet rset = pstmt.executeQuery();
          ????? /* 循環獲取并處理結果集數據 */
          ????? while(rset.next())
          ??????? auths_article =auths_article + rset.getString(1);
          ????? /* 關閉結果集 */
          ????? rset.close();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ??? auths_article = auths_article + "所編寫文章的標題如下:\n";
          ?
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql2);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, code);
          ????? /* 執行查詢,并將結果保存到結果集中 */
          ????? ResultSet rset = pstmt.executeQuery();
          ????? /* 循環獲取并處理結果集數據 */
          ????? while(rset.next()) {
          ??????? auths_article =auths_article + "??? " + rset.getString(1) + "\n";
          ????? }
          ????? /* 關閉結果集 */
          ????? rset.close();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ??? return auths_article;
          ? }
          ?
          ? public static String query_type_article_number(String code)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ??? String sql = "SELECT count(*) FROM article WHERE article_code IN "
          ?????? + "(SELECT article_code FROM article_type WHERE type_code=?)";
          ??? String article_number = new String("類型為" + code + "的文章共有 ");
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, code);
          ? ????/* 執行查詢,并將結果保存到結果集中 */
          ????? ResultSet rset = pstmt.executeQuery();
          ????? /* 循環獲取并處理結果集數據 */
          ????? while(rset.next())
          ??????? article_number = article_number + rset.getString(1) + "篇";
          ????? /* 關閉結果集 */
          ????? rset.close();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ??? return article_number;
          ? }
          }
          ?
          2.???????? 裝載Java代碼及類到Oracle8i數據庫中
          ?
          在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數據庫中了。下面是完成這項任務的方法:

          ?
          3.???????? 發行Java,生成調用說明
          ?
          在裝載了Java類后,就可以發行該Java類,并生成調用其方法的函數說明了。下面是完成該項任務的方法:
          ?


          ?
          4.???????? 調用JSP
          ?
          在生成了調用Java方法的函數說明之后,就可以調用這些函數了。例如:
          ?
          使用Java開發
          Java類用于封裝Java方法,與此類似,包用于封裝過程和函數等。本節將通過創建用于管理表subject的包為例,說明使用Java開發包的方法。如下圖所示:
          ?

          ?
          下面講述完成上述任務的方法和過程。
          ?
          1.???????? 編寫Java源代碼
          ?
          程序清單如下(manage_subject.java):
          ?
          /* 導入Java類 */
          import java.sql.*;
          import java.io.*;
          import oracle.jdbc.driver.*;
          ?
          /* 主類 */
          public class manage_subject {
          ?
          ? public static String query_subject()
          ? throws SQLException {
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造SQL語句 */
          ??? String sql = "SELECT * FROM subject";
          ??? /* 聲明并初始化subject變量 */
          ??? String subject = new String();
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 創建Statement對象 */
          ????? Statement stmt = conn.createStatement();
          ????? /* 執行SQL語句,并將查詢結果賦給結果集 */
          ????? ResultSet rset = stmt.executeQuery(sql);
          ????? /* 循環獲取并處理結果集變量 */
          ????? while(rset.next())
          ??????? subject = subject + rset.getString(1) + "\n";
          ????? /* 關閉結果集 */
          ????? rset.close();
          ??? } catch (SQLException e) {}
          ??? return subject;
          ? }
          ?
          ? public static void insert_subject(String subject)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ??? String sql = "INSERT INTO subject VALUES(?)";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, subject);
          ????? /* 執行動態SQL語句 */
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ? }
          ?
          ? public static void delete_subject(String subject)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ??? String sql = "DELETE FROM subject WHERE subject=?";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, subject);
          ????? /* 執行動態SQL語句 */
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ? }
          ?
          ? public static void update_subject(String old_subject,String new_subject)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ??? String sql = "UPDATE subject SET subject=? WHERE subject=?";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, new_subject);
          ????? pstmt.setString(2, old_subject);
          ????? /* 執行動態SQL語句 */
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ? }
          }
          ?
          2.???????? 裝載Java代碼及類到Oracle8i數據庫中
          ?
          在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數據庫中了。下面是完成這項任務的方法:
          ?


          ?
          3.???????? 發行Java,生成調用說明
          ?
          在裝載了Java類后,就可以發行該Java類,并生成調用其方法的包了。下面是完成該項任務的方法:



          4.???????? 調用JSP
          ?
          在生成了調用Java方法的包后,就可以調用這些方法所對應的函數和過程了。例如:
          ?




          使用Java開發觸發器
          觸發器是一段存儲程序,當執行特定修改操作時,會觸發它,并執行其中的存儲程序。下面以記載表AUTHS作者工資更新情況的觸發器為例,說明使用Java開發觸發器的方法。如下圖所示:
          ?


          ?
          下面講述完成上述任務的方法和過程。
          ?
          1.???????? 編寫Java源代碼
          ?
          程序清單如下(trigger.java):
          ?
          /* 導入Java類 */
          import java.sql.*;
          import java.io.*;
          import oracle.jdbc.driver.*;
          /* 主類 */
          public class trigger {
          ?
          ? public static void log_salary(String name,float old_sal,float new_sal)
          ? throws SQLException {
          ?
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? String sql = "INSERT INTO salary_audit VALUES(?,?,?)";
          ?
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? pstmt.setString(1, name);
          ????? pstmt.setFloat(2, old_sal);
          ????? pstmt.setFloat(3, new_sal);
          ????? pstmt.executeUpdate();
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ? }
          }
          ?
          2.???????? 裝載Java代碼及類到Oracle8i數據庫中
          ?
          在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數據庫中了。下面是完成這項任務的方法:
          ?


          3.???????? 發行Java,生成調用說明
          ?
          在裝載了Java類后,就可以發行該Java類,并生成調用其方法的過程說明及觸發器了。下面是完成該項任務的方法:




          ?
          4.???????? 調用JSP
          ?
          在創建了觸發器之后,當修改作者工資時會自動調用其中的存儲程序。例如:
          ?

          使用Java開發對象方法
          對象類型是一種用戶自定義的數據結構,它可以將數據類型、函數以及過程封裝到該數據結構中。對象方法是指對象類型中的函數和過程,本節將以獲取和增加對象工資信息為例,說明使用Java開發對象方法的方法。如下圖所示:

          ?
          下面講述完成上述任務的方法及過程:
          ?
          1.???????? 編寫Java源代碼
          ?
          程序清單如下(object_type.java):
          ?
          /* 導入Java類 */
          import java.sql.*;
          import java.io.*;
          import oracle.sql.*;
          import oracle.jdbc.driver.*;
          import oracle.oracore.*;
          import oracle.jdbc2.*;
          import java.math.*;
          ?
          /* 主類,實現了SQLData接口 */
          public class object_type implements SQLData {
          ?
          ? /* 聲明private變量,它們對應于對象類型的屬性 */
          ? private String code;
          ? private String name;
          ? private BigDecimal sex;
          ? private BigDecimal salary;
          ?
          ? /* 方法get_name():對象類型的方法,用于獲取對象姓名 */
          ? public String get_name() {
          ??? return name;
          ? }
          ?
          ? /* 方法get_salary():對象類型的方法,用于獲取對象工資 */
          ? public BigDecimal get_salary() {
          ??? BigDecimal sal = salary;
          ??? return sal;
          ? }
          ? /* 方法raise_salary():對象類型的方法,用于增加對象工資 */
          ? public void raise_salary(BigDecimal raise) {
          ??? salary = salary.add(raise);
          ? }
          ?
          ? /* 以下程序段實現了接口SQLData */
          ? String sql_type;
          ? public String getSQLTypeName() throws SQLException {
          ??? return sql_type;
          ? }
          ?
          ? public void readSQL(SQLInput stream, String typeName) throws SQLException {
          ??? sql_type = typeName;
          ??? code = stream.readString();
          ??? name = stream.readString();
          ??? sex = stream.readBigDecimal();
          ??? salary = stream.readBigDecimal();
          ??}
          ?
          ? public void writeSQL(SQLOutput stream) throws SQLException {
          ??? stream.writeString(code);
          ??? stream.writeString(name);
          ??? stream.writeBigDecimal(sex);
          ??? stream.writeBigDecimal(salary);
          ? }
          }
          ?
          2.???????? 裝載Java代碼及類到Oracle8i數據庫中
          ?
          在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數據庫中了。下面是完成這項任務的方法:
          ?


          ?
          3.???????? 發行Java,生成調用說明
          ?
          在裝載了Java類后,就可以發行該Java類,并生成調用其方法的相應對象方法了。下面是完成該項任務的方法:
          ?



          ?
          4.???????? 調用JSP
          ?
          在創建了對象類型及對象方法之后,就可以調用這些對象方法了。例如:
          ?
          使用JDeveloper開發JSP
          本節以創建用于操縱ARTICLE表的JSP為例,說明使用JDeveloper 2.0開發JSP的方法。如下圖所示:

          這里只簡單介紹使用JDeveloper開發JSP的過程和步驟,而關于如何使用JDeveloper請讀者參見相關手冊。
          ?
          1.???????? 準備工作
          ?
          1)??????? 選擇“File—> New Workspace”,創建名稱為jsp.jws的工作組。如下圖所示:
          ?

          ?
          2)??????? 選擇“File—>New Project”,此時會啟動新項目創建向導,并顯示如下對話框:
          ?

          ?
          3)??????? 選中“Create an <Empty Project>”,然后單擊“Next”,此時會顯示如下對話框:

          ?
          4)??????? 如上圖所示,在“Project Name”框中鍵入“article”,項目路徑框中鍵入“d:\jsp”,然后單擊“Next”,此時會顯示如下對話框:
          ?

          ?
          5)??????? 在上圖的對話框中鍵入你所需要的信息,然后單擊“Next”,此時會顯示如下對話框:
          ?

          ?
          6)??????? 單擊“Finish”,完成項目的創建過程,此時的圖形界面如下:
          ?

          ?
          2.???????? 編寫Java源代碼
          ?
          在完成了準備工作之后,我們就可以編寫Java源代碼了。步驟如下:
          ?
          1)??????? 選擇“File—>New”,此時會彈出如下對話框:
          ?


          ?
          2)??????? 如上圖所示,選中“Class”,然后單擊“OK”,此時會彈出如下對話框:
          ?

          ?
          3)??????? 如上圖所示,在“Class Name”框中鍵入“article”,選中“Style”中的“Public”,然后單擊“OK”,此時會增加名稱為“article.java”的節點。如下圖所示:
          ?

          ?
          4)??????? 雙擊“article.java”節點,會顯示編輯工作區。如下圖所示:
          ?

          ?
          5)??????? 然后,在編輯工作區中編寫如下的Java源代碼(article.java):
          ?
          /* 導入Java類 */
          import java.sql.*;
          import java.io.*;
          import oracle.jdbc.driver.*;
          ?
          /* 主類 */
          public class article {
          ?
          ? public static String query_article(String code)
          ? throws SQLException {
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句*/
          ??? String sql = "SELECT author_code,title FROM article " +
          ????????????????? "WHERE article_code = ?";
          ??? /* 聲明String變量article_info,該變量將用于存儲文章信息 */
          ??? String article_info = new String();
          ?
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, code);
          ????? ResultSet rset = pstmt.executeQuery();
          ????? /* 循環獲取并處理結果 */
          ????? while(rset.next()) {
          ??????? article_info = "作者代碼:? " + rset.getString(1) + "\n";
          ??????? article_info = article_info + "文章標題:? " +
          ????????????????????????? rset.getString(2);
          ????? }
          ????? /* 關閉結果集 */
          ????? rset.close();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ??? return article_info;
          ? }
          ?
          ? public static void insert_article(String article_code,
          ????? String author_code,String secrate_level,String pub_date)
          ? throws SQLException {
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ??? String sql = "INSERT INTO article (article_code,author_code," +
          ??????????????????? "secrate_level,pub_date) VALUES (?,?,?,?)";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, article_code);
          ????? pstmt.setString(2, author_code);
          ????? pstmt.setString(3, secrate_level);
          ????? pstmt.setString(4, pub_date);
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ? }
          ?
          ? public static void delete_article (String code)
          ? throws SQLException {
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造SQL語句 */
          ??? String sql = "DELETE FROM article? WHERE article_code = ?";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ????? pstmt.setString(1, code);
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ?? ???pstmt.close();
          ??? } catch (SQLException e) {}
          ? }
          ?
          ? public static void update_article (String code,String secrate_level)
          ? throws SQLException {
          ??? /* 建立到數據庫的缺省連接 */
          ??? Connection conn = new OracleDriver().defaultConnection();
          ??? /* 構造動態SQL語句 */
          ? ??String sql = "UPDATE article SET secrate_level = ?" +
          ????????????????? " WHERE article_code = ?";
          ??? /* 使用try ... catch語句抓取并拋出例外 */
          ??? try {
          ????? /* 準備動態SQL語句 */
          ????? PreparedStatement pstmt = conn.prepareStatement(sql);
          ????? /* 設置動態SQL參數值 */
          ???? ?pstmt.setString(1, secrate_level);
          ????? pstmt.setString(2, code);
          ????? pstmt.executeUpdate();
          ????? /* 關閉動態SQL語句 */
          ????? pstmt.close();
          ??? } catch (SQLException e) {}
          ? }
          }
          ?
          3.???????? 配置并發行JSP
          ?
          步驟如下:
          ?
          1)??????? 選擇“Project—>Deploy—>New Profile”,此時會彈出如下對話框:
          ?

          ?
          2)??????? 如上圖所示,選中“Deploy Java Classes and Stored Procedure to Oracle8i”,然后單擊“Next”,此時會彈出如下對話框:
          ?

          ?
          3)??????? 單擊“Next”,此時會彈出如下對話框:
          ?

          ?
          4)??????? 單擊“Next”,此時會顯示如下對話框:
          ?

          ?
          5)??????? 單擊“Next”,此時會顯示如下對話框:
          ?

          ?
          6)??????? 清除“Default Database Package”框,然后單擊“Next”,此時會顯示如下對話框:
          ?

          ?
          7)??????? 單擊“New”創建數據庫連接,此時會彈出如下對話框:
          ?

          ?
          該對話框用于配置數據庫連接信息,按照你的數據庫設置來配置相應參數。完成數據庫連接的配置后,單擊“Test Connection”測試配置是否正確。如果配置不正確,則修改配置參數。
          ?
          8)??????? 單擊“OK”,此時會彈出如下對話框:
          ?

          ?
          在該對話框中顯示了相應的數據庫連接信息。
          ?
          9)??????? 單擊“Next”,此時會彈出如下對話框:
          ?

          ?
          10)???? 單擊“Finish”,此時會彈出如下對話框:
          ?

          ?
          11)???? 單擊“No”退出配置,然后在主窗口中選中配置文件“Profile1.prf”,單擊鼠標右鍵,此時會顯示如下彈出菜單:
          ?

          ?
          12)???? 從彈出菜單中選擇“Properties”,此時會顯示如下對話框:
          ?

          ?
          13)???? 選擇“Methods”頁,此時的對話框如下所示:
          ?

          ?
          14)???? 如上圖所示,選中Publish下的所有單選框,然后單擊“Done”,此時會顯示如下對話框:
          ?

          ?
          15)???? 單擊“Yes”,會開始配置和發行JSP,并最終顯示如下界面:
          ?

          ?
          16)???? 單擊“Done”,此時會顯示如下信息框:
          ?

          ?
          17)???? 單擊“OK”,這樣我們就完成了配置和發行JSP的全部過程了。然后,我們就可以調用JSP完成相應任務了。
          ?
          4.???????? 調用JSP
          ?
          在創建了基于Java的函數和過程之后,就可以調用這些函數和過程了。方法如下:
          ?





          posted on 2006-08-16 15:18 黑咖啡 閱讀(321) 評論(0)  編輯  收藏 所屬分類: Tec Article

          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          留言簿(2)

          隨筆分類(67)

          文章分類(43)

          Good Article

          Good Blogs

          Open Source

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 兴隆县| 湘阴县| 招远市| 广元市| 怀远县| 惠州市| 黄龙县| 闻喜县| 池州市| 隆回县| 鄂温| 汉中市| 马边| 苍溪县| 大邑县| 莱阳市| 灌云县| 迁安市| 中西区| 云安县| 吴堡县| 阳信县| 翼城县| 陇西县| 纳雍县| 永清县| 宁明县| 铁力市| 绥阳县| 松阳县| 巴塘县| 阿荣旗| 铅山县| 大邑县| 日土县| 南投县| 阿尔山市| 岱山县| 郧西县| 定南县| 九江市|