<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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




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

    使用Java開發(fā)函數(shù)
    函數(shù)用于返回特定數(shù)據(jù)。本節(jié)將通過創(chuàng)建用于返回作者的文章標題,以及某種類型的文章個數(shù)為例,說明使用Java開發(fā)函數(shù)的方法。如下圖所示:
    ?
    ?
    下面講述完成上述任務的方法和過程。
    ?
    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 {
    ?
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造動態(tài)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 {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql1);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, code);
    ????? /* 執(zhí)行查詢,并將結(jié)果保存到結(jié)果集中 */
    ????? ResultSet rset = pstmt.executeQuery();
    ????? /* 循環(huán)獲取并處理結(jié)果集數(shù)據(jù) */
    ????? while(rset.next())
    ??????? auths_article =auths_article + rset.getString(1);
    ????? /* 關閉結(jié)果集 */
    ????? rset.close();
    ????? /* 關閉動態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ??? auths_article = auths_article + "所編寫文章的標題如下:\n";
    ?
    ??? try {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql2);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, code);
    ????? /* 執(zhí)行查詢,并將結(jié)果保存到結(jié)果集中 */
    ????? ResultSet rset = pstmt.executeQuery();
    ????? /* 循環(huán)獲取并處理結(jié)果集數(shù)據(jù) */
    ????? while(rset.next()) {
    ??????? auths_article =auths_article + "??? " + rset.getString(1) + "\n";
    ????? }
    ????? /* 關閉結(jié)果集 */
    ????? rset.close();
    ????? /* 關閉動態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ??? return auths_article;
    ? }
    ?
    ? public static String query_type_article_number(String code)
    ? throws SQLException {
    ?
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造動態(tài)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 {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, code);
    ? ????/* 執(zhí)行查詢,并將結(jié)果保存到結(jié)果集中 */
    ????? ResultSet rset = pstmt.executeQuery();
    ????? /* 循環(huán)獲取并處理結(jié)果集數(shù)據(jù) */
    ????? while(rset.next())
    ??????? article_number = article_number + rset.getString(1) + "篇";
    ????? /* 關閉結(jié)果集 */
    ????? rset.close();
    ????? /* 關閉動態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ??? return article_number;
    ? }
    }
    ?
    2.???????? 裝載Java代碼及類到Oracle8i數(shù)據(jù)庫中
    ?
    在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數(shù)據(jù)庫中了。下面是完成這項任務的方法:

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


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

    ?
    下面講述完成上述任務的方法和過程。
    ?
    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 {
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造SQL語句 */
    ??? String sql = "SELECT * FROM subject";
    ??? /* 聲明并初始化subject變量 */
    ??? String subject = new String();
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 創(chuàng)建Statement對象 */
    ????? Statement stmt = conn.createStatement();
    ????? /* 執(zhí)行SQL語句,并將查詢結(jié)果賦給結(jié)果集 */
    ????? ResultSet rset = stmt.executeQuery(sql);
    ????? /* 循環(huán)獲取并處理結(jié)果集變量 */
    ????? while(rset.next())
    ??????? subject = subject + rset.getString(1) + "\n";
    ????? /* 關閉結(jié)果集 */
    ????? rset.close();
    ??? } catch (SQLException e) {}
    ??? return subject;
    ? }
    ?
    ? public static void insert_subject(String subject)
    ? throws SQLException {
    ?
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造動態(tài)SQL語句 */
    ??? String sql = "INSERT INTO subject VALUES(?)";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, subject);
    ????? /* 執(zhí)行動態(tài)SQL語句 */
    ????? pstmt.executeUpdate();
    ????? /* 關閉動態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ? }
    ?
    ? public static void delete_subject(String subject)
    ? throws SQLException {
    ?
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造動態(tài)SQL語句 */
    ??? String sql = "DELETE FROM subject WHERE subject=?";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, subject);
    ????? /* 執(zhí)行動態(tài)SQL語句 */
    ????? pstmt.executeUpdate();
    ????? /* 關閉動態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ? }
    ?
    ? public static void update_subject(String old_subject,String new_subject)
    ? throws SQLException {
    ?
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造動態(tài)SQL語句 */
    ??? String sql = "UPDATE subject SET subject=? WHERE subject=?";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, new_subject);
    ????? pstmt.setString(2, old_subject);
    ????? /* 執(zhí)行動態(tài)SQL語句 */
    ????? pstmt.executeUpdate();
    ????? /* 關閉動態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ? }
    }
    ?
    2.???????? 裝載Java代碼及類到Oracle8i數(shù)據(jù)庫中
    ?
    在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數(shù)據(jù)庫中了。下面是完成這項任務的方法:
    ?


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



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




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


    ?
    下面講述完成上述任務的方法和過程。
    ?
    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 {
    ?
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? 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數(shù)據(jù)庫中
    ?
    在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數(shù)據(jù)庫中了。下面是完成這項任務的方法:
    ?


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




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

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

    ?
    下面講述完成上述任務的方法及過程:
    ?
    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.*;
    ?
    /* 主類,實現(xiàn)了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);
    ? }
    ?
    ? /* 以下程序段實現(xiàn)了接口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數(shù)據(jù)庫中
    ?
    在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle8i數(shù)據(jù)庫中了。下面是完成這項任務的方法:
    ?


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



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

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

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

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

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

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

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

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


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

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

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

    ?
    5)??????? 然后,在編輯工作區(qū)中編寫如下的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 {
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造動態(tài)SQL語句*/
    ??? String sql = "SELECT author_code,title FROM article " +
    ????????????????? "WHERE article_code = ?";
    ??? /* 聲明String變量article_info,該變量將用于存儲文章信息 */
    ??? String article_info = new String();
    ?
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, code);
    ????? ResultSet rset = pstmt.executeQuery();
    ????? /* 循環(huán)獲取并處理結(jié)果 */
    ????? while(rset.next()) {
    ??????? article_info = "作者代碼:? " + rset.getString(1) + "\n";
    ??????? article_info = article_info + "文章標題:? " +
    ????????????????????????? rset.getString(2);
    ????? }
    ????? /* 關閉結(jié)果集 */
    ????? rset.close();
    ????? /* 關閉動態(tài)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 {
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造動態(tài)SQL語句 */
    ??? String sql = "INSERT INTO article (article_code,author_code," +
    ??????????????????? "secrate_level,pub_date) VALUES (?,?,?,?)";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, article_code);
    ????? pstmt.setString(2, author_code);
    ????? pstmt.setString(3, secrate_level);
    ????? pstmt.setString(4, pub_date);
    ????? pstmt.executeUpdate();
    ????? /* 關閉動態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ? }
    ?
    ? public static void delete_article (String code)
    ? throws SQLException {
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造SQL語句 */
    ??? String sql = "DELETE FROM article? WHERE article_code = ?";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, code);
    ????? pstmt.executeUpdate();
    ????? /* 關閉動態(tài)SQL語句 */
    ?? ???pstmt.close();
    ??? } catch (SQLException e) {}
    ? }
    ?
    ? public static void update_article (String code,String secrate_level)
    ? throws SQLException {
    ??? /* 建立到數(shù)據(jù)庫的缺省連接 */
    ??? Connection conn = new OracleDriver().defaultConnection();
    ??? /* 構(gòu)造動態(tài)SQL語句 */
    ? ??String sql = "UPDATE article SET secrate_level = ?" +
    ????????????????? " WHERE article_code = ?";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準備動態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設置動態(tài)SQL參數(shù)值 */
    ???? ?pstmt.setString(1, secrate_level);
    ????? pstmt.setString(2, code);
    ????? pstmt.executeUpdate();
    ????? /* 關閉動態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ? }
    }
    ?
    3.???????? 配置并發(fā)行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”創(chuàng)建數(shù)據(jù)庫連接,此時會彈出如下對話框:
    ?

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

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

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

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

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

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

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

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

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

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





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

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

    留言簿(2)

    隨筆分類(67)

    文章分類(43)

    Good Article

    Good Blogs

    Open Source

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲最大成人网色| 亚洲AV人无码综合在线观看| 亚洲精品尤物yw在线影院| 亚洲欧洲一区二区三区| 亚洲精品中文字幕乱码三区| 亚洲免费在线视频| 亚洲一区二区三区在线观看网站| 亚洲av永久无码精品网址| 亚洲av无码成人精品区| 黄页网站在线看免费| 色视频色露露永久免费观看| 最近免费中文在线视频| 精品成人免费自拍视频| 国产精品美女免费视频观看| 久章草在线精品视频免费观看| 全黄大全大色全免费大片| 一级中文字幕免费乱码专区| 爽爽爽爽爽爽爽成人免费观看| 91精品国产免费网站| 精品久久久久久久免费人妻| 相泽亚洲一区中文字幕| 亚洲小说图片视频| 污污视频网站免费观看| 亚洲av成人一区二区三区观看在线| 特a级免费高清黄色片| 99热在线观看免费| 国产a级特黄的片子视频免费| 久久亚洲中文字幕无码| 中文在线观看永久免费 | 免费少妇a级毛片人成网| 亚洲国产精品无码久久久秋霞2| 全部免费a级毛片| 亚洲一区二区中文| 国产午夜亚洲精品不卡免下载| 香蕉成人免费看片视频app下载| 国内大片在线免费看| 日本一线a视频免费观看| 亚洲国产精品无码av| 亚洲AV永久无码精品放毛片| 无码中文字幕av免费放dvd| 国产午夜鲁丝片AV无码免费 |