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

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




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

    使用Java開發(fā)函數(shù)
    函數(shù)用于返回特定數(shù)據(jù)。本節(jié)將通過創(chuàng)建用于返回作者的文章標(biāo)題,以及某種類型的文章個(gè)數(shù)為例,說明使用Java開發(fā)函數(shù)的方法。如下圖所示:
    ?
    ?
    下面講述完成上述任務(wù)的方法和過程。
    ?
    1.???????? 編寫Java源代碼
    ?
    程序清單如下(query_article.java):
    ?
    /* 導(dǎo)入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)造動(dòng)態(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 {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql1);
    ????? /* 設(shè)置動(dòng)態(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);
    ????? /* 關(guān)閉結(jié)果集 */
    ????? rset.close();
    ????? /* 關(guān)閉動(dòng)態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ??? auths_article = auths_article + "所編寫文章的標(biāo)題如下:\n";
    ?
    ??? try {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql2);
    ????? /* 設(shè)置動(dòng)態(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";
    ????? }
    ????? /* 關(guān)閉結(jié)果集 */
    ????? rset.close();
    ????? /* 關(guān)閉動(dòng)態(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)造動(dòng)態(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 {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設(shè)置動(dòng)態(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) + "篇";
    ????? /* 關(guān)閉結(jié)果集 */
    ????? rset.close();
    ????? /* 關(guān)閉動(dòng)態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ??? return article_number;
    ? }
    }
    ?
    2.???????? 裝載Java代碼及類到Oracle8i數(shù)據(jù)庫中
    ?
    在編寫了Java源代碼之后,就可以將Java對(duì)象裝載到Oracle8i數(shù)據(jù)庫中了。下面是完成這項(xiàng)任務(wù)的方法:

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


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

    ?
    下面講述完成上述任務(wù)的方法和過程。
    ?
    1.???????? 編寫Java源代碼
    ?
    程序清單如下(manage_subject.java):
    ?
    /* 導(dǎo)入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對(duì)象 */
    ????? 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";
    ????? /* 關(guā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)造動(dòng)態(tài)SQL語句 */
    ??? String sql = "INSERT INTO subject VALUES(?)";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設(shè)置動(dòng)態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, subject);
    ????? /* 執(zhí)行動(dòng)態(tài)SQL語句 */
    ????? pstmt.executeUpdate();
    ????? /* 關(guān)閉動(dòng)態(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)造動(dòng)態(tài)SQL語句 */
    ??? String sql = "DELETE FROM subject WHERE subject=?";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設(shè)置動(dòng)態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, subject);
    ????? /* 執(zhí)行動(dòng)態(tài)SQL語句 */
    ????? pstmt.executeUpdate();
    ????? /* 關(guān)閉動(dòng)態(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)造動(dòng)態(tài)SQL語句 */
    ??? String sql = "UPDATE subject SET subject=? WHERE subject=?";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設(shè)置動(dòng)態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, new_subject);
    ????? pstmt.setString(2, old_subject);
    ????? /* 執(zhí)行動(dòng)態(tài)SQL語句 */
    ????? pstmt.executeUpdate();
    ????? /* 關(guān)閉動(dòng)態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ? }
    }
    ?
    2.???????? 裝載Java代碼及類到Oracle8i數(shù)據(jù)庫中
    ?
    在編寫了Java源代碼之后,就可以將Java對(duì)象裝載到Oracle8i數(shù)據(jù)庫中了。下面是完成這項(xiàng)任務(wù)的方法:
    ?


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



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




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


    ?
    下面講述完成上述任務(wù)的方法和過程。
    ?
    1.???????? 編寫Java源代碼
    ?
    程序清單如下(trigger.java):
    ?
    /* 導(dǎo)入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對(duì)象裝載到Oracle8i數(shù)據(jù)庫中了。下面是完成這項(xiàng)任務(wù)的方法:
    ?


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




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

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

    ?
    下面講述完成上述任務(wù)的方法及過程:
    ?
    1.???????? 編寫Java源代碼
    ?
    程序清單如下(object_type.java):
    ?
    /* 導(dǎo)入Java類 */
    import java.sql.*;
    import java.io.*;
    import oracle.sql.*;
    import oracle.jdbc.driver.*;
    import oracle.oracore.*;
    import oracle.jdbc2.*;
    import java.math.*;
    ?
    /* 主類,實(shí)現(xiàn)了SQLData接口 */
    public class object_type implements SQLData {
    ?
    ? /* 聲明private變量,它們對(duì)應(yīng)于對(duì)象類型的屬性 */
    ? private String code;
    ? private String name;
    ? private BigDecimal sex;
    ? private BigDecimal salary;
    ?
    ? /* 方法get_name():對(duì)象類型的方法,用于獲取對(duì)象姓名 */
    ? public String get_name() {
    ??? return name;
    ? }
    ?
    ? /* 方法get_salary():對(duì)象類型的方法,用于獲取對(duì)象工資 */
    ? public BigDecimal get_salary() {
    ??? BigDecimal sal = salary;
    ??? return sal;
    ? }
    ? /* 方法raise_salary():對(duì)象類型的方法,用于增加對(duì)象工資 */
    ? public void raise_salary(BigDecimal raise) {
    ??? salary = salary.add(raise);
    ? }
    ?
    ? /* 以下程序段實(shí)現(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對(duì)象裝載到Oracle8i數(shù)據(jù)庫中了。下面是完成這項(xiàng)任務(wù)的方法:
    ?


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



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

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

    ?
    2)??????? 選擇“File—>New Project”,此時(shí)會(huì)啟動(dòng)新項(xiàng)目創(chuàng)建向?qū)В@示如下對(duì)話框:
    ?

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

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

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

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

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


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

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

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

    ?
    5)??????? 然后,在編輯工作區(qū)中編寫如下的Java源代碼(article.java):
    ?
    /* 導(dǎo)入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)造動(dòng)態(tài)SQL語句*/
    ??? String sql = "SELECT author_code,title FROM article " +
    ????????????????? "WHERE article_code = ?";
    ??? /* 聲明String變量article_info,該變量將用于存儲(chǔ)文章信息 */
    ??? String article_info = new String();
    ?
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設(shè)置動(dòng)態(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 + "文章標(biāo)題:? " +
    ????????????????????????? rset.getString(2);
    ????? }
    ????? /* 關(guān)閉結(jié)果集 */
    ????? rset.close();
    ????? /* 關(guān)閉動(dòng)態(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)造動(dòng)態(tài)SQL語句 */
    ??? String sql = "INSERT INTO article (article_code,author_code," +
    ??????????????????? "secrate_level,pub_date) VALUES (?,?,?,?)";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設(shè)置動(dòng)態(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();
    ????? /* 關(guān)閉動(dòng)態(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 {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設(shè)置動(dòng)態(tài)SQL參數(shù)值 */
    ????? pstmt.setString(1, code);
    ????? pstmt.executeUpdate();
    ????? /* 關(guān)閉動(dòng)態(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)造動(dòng)態(tài)SQL語句 */
    ? ??String sql = "UPDATE article SET secrate_level = ?" +
    ????????????????? " WHERE article_code = ?";
    ??? /* 使用try ... catch語句抓取并拋出例外 */
    ??? try {
    ????? /* 準(zhǔn)備動(dòng)態(tài)SQL語句 */
    ????? PreparedStatement pstmt = conn.prepareStatement(sql);
    ????? /* 設(shè)置動(dòng)態(tài)SQL參數(shù)值 */
    ???? ?pstmt.setString(1, secrate_level);
    ????? pstmt.setString(2, code);
    ????? pstmt.executeUpdate();
    ????? /* 關(guān)閉動(dòng)態(tài)SQL語句 */
    ????? pstmt.close();
    ??? } catch (SQLException e) {}
    ? }
    }
    ?
    3.???????? 配置并發(fā)行JSP
    ?
    步驟如下:
    ?
    1)??????? 選擇“Project—>Deploy—>New Profile”,此時(shí)會(huì)彈出如下對(duì)話框:
    ?

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

    ?
    3)??????? 單擊“Next”,此時(shí)會(huì)彈出如下對(duì)話框:
    ?

    ?
    4)??????? 單擊“Next”,此時(shí)會(huì)顯示如下對(duì)話框:
    ?

    ?
    5)??????? 單擊“Next”,此時(shí)會(huì)顯示如下對(duì)話框:
    ?

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

    ?
    7)??????? 單擊“New”創(chuàng)建數(shù)據(jù)庫連接,此時(shí)會(huì)彈出如下對(duì)話框:
    ?

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

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

    ?
    10)???? 單擊“Finish”,此時(shí)會(huì)彈出如下對(duì)話框:
    ?

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

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

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

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

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

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

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





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

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

    留言簿(2)

    隨筆分類(67)

    文章分類(43)

    Good Article

    Good Blogs

    Open Source

    最新隨筆

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 日韩高清免费在线观看| 一级美国片免费看| 亚洲免费网站在线观看| 亚洲码在线中文在线观看| 亚洲国产精品久久久天堂| 国产精品亚洲片在线| 国产av无码专区亚洲av桃花庵| 亚洲日韩av无码| 亚洲VA成无码人在线观看天堂| 亚洲成Av人片乱码色午夜| 亚洲成色在线综合网站| 亚洲综合日韩中文字幕v在线| 亚洲国产女人aaa毛片在线| 亚洲综合久久综合激情久久| 亚洲制服丝袜精品久久| 456亚洲人成影院在线观| 一本色道久久88—综合亚洲精品| 亚洲 日韩 色 图网站| 日韩国产欧美亚洲v片 | 亚洲精品国自产拍在线观看| 亚洲av中文无码| 亚洲中文字幕无码爆乳AV| 久久久久亚洲AV成人无码| 亚洲福利一区二区| 亚洲色无码国产精品网站可下载| 色婷婷六月亚洲综合香蕉| 久久精品无码专区免费| 99热在线观看免费| 无码人妻一区二区三区免费手机| 国产青草视频免费观看97| 国产成人精品久久亚洲| 亚洲AV人无码综合在线观看| 亚洲国产精品午夜电影| 亚洲AV日韩综合一区| 久久一区二区免费播放| 亚洲美女免费视频| 国产伦精品一区二区三区免费下载 | 你是我的城池营垒免费看| 67194成手机免费观看| 麻豆国产人免费人成免费视频| 亚洲高清最新av网站|