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

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

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

    dyerac  
    dyerac In Java
    公告

    日歷
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567
    統計
    • 隨筆 - 36
    • 文章 - 10
    • 評論 - 94
    • 引用 - 0

    導航

    常用鏈接

    留言簿(5)

    隨筆分類(49)

    隨筆檔案(36)

    文章分類(11)

    文章檔案(10)

    相冊

    dyerac

    搜索

    •  

    積分與排名

    • 積分 - 79220
    • 排名 - 705

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

     
     

    使用 SQLJ 開發應用程序

    用 DB2 UDB V8.1 和 Application Developer V5.1.2 創建使用 SQLJ 的 Java 和 J2EE 應用程序

    文檔選項

    將此頁作為電子郵件發送

    未顯示需要 JavaScript 的文檔選項

    樣例代碼

    級別: 初級

    Owen Cline (owenc@us.ibm.com), 認證的 IT 咨詢專家 - WebSphere 軟件服務, IBM

    2005 年 2 月 01 日

    這篇 "how-to" 文章將解釋如何在 Java™ 應用程序和 J2EE™ 應用程序中使用 SQLJ。文中將介紹 SQLJ 語法,使用 SQLJ 訪問數據源,建立 WebSphere® Application Developer 項目以支持 SQLJ,以及創建和調用 DB2® 存儲過程。

    SQLJ 概述

    SQL 語句包括查詢(SELECT)、插入(INSERT)、更改(UPDATE)、刪除(DELETE)語句以及其他對存儲在關系數據庫表中的數據進行操作的語句。SQLJ 是在 Java 中嵌入這些 SQL 語句的一種約定,它是以某種允許編程工具對 Java 中 SQL 進行編譯時分析的方式實現嵌入的,在編譯時會對 SQL 語句進行語法檢查以保證語法的正確性,進行類型檢查以確定 Java 和 SQL 之間交換的數據具有兼容的類型和適當的類型轉換,以及進行模式檢查以確保 SQL 結構在它們執行時所在的數據庫模式中是格式良好的、合法的。嵌入式 SQL 語句被稱為是 "靜態的(static)",因為這些語句在 Java 程序中一目了然,因而嵌入式 SQL 語句隨著包含它們的 Java 程序的編譯而編譯(通常的術語是"預編譯")。我們提議將 SQLJ 作為用于緊密集成 Java/SQL 程序的一種方便有效的標準。

    SQLJ 簡史

    正如 Connie Tsui 在她的文章(后面有引用)中解釋的那樣,一個非正式的、開放的數據庫供應商組織在 1997 年 4 月開始定期的會面,以便交換關于如何在 Java 編程語言中使用靜態 SQL 語句和結構的思想。主要參與者包括 IBM®、Oracle、Compaq、Informix®、Sybase、Cloudscape™ 和 Sun Microsystems。該組織將他們為之努力的規范命名為 JSQL。在發現 JSQL 已經是商標術語后,JSQL 被更名為 SQLJ。在 1997 年 12 月,Oracle 向其他成員提供了 Java 中嵌入式 SQL 的一個參考實現。該參考實現可以在任何支持 JDK 1.1 的平臺上運行,并且是與供應商無關的。在 1998 年 12 月,用于在 Java 中嵌入 SQL 的規范被完全開發出來,并且被接受為 ANSI 標準 Database Language —— SQL, Part 10 Object Language Bindings (SQL/OLB) ANSI x3.135.10-1998。該規范已經被當作 SQLJ 規范的 Part 0 供大家引用。如今它被稱作 SQL/OLB (Object Language Bindings)。

    SQLJ 與 JDBC 的比較

    SQLJ —— Java 數據庫應用程序的開門咒語

    SQLJ 標準現在為 Java 應用程序提供了基于 SQL 的數據庫訪問。SQLJ —— Java 數據庫應用程序的開門咒語

    下面是 SQLJ 相對于直接在 JDBC 中編寫代碼的優勢:

    SQLJ 程序需要的代碼行數比 JDBC 程序更少。SQL 程序更簡短,因而更易于調試。SQLJ 可以通過在編譯時使用數據庫連接,對代碼執行語法和語義上的檢查。SQLJ 提供了對查詢結果及其他返回參數的強類型檢查,而 JDBC 值則是直接從 SQL 返回,在編譯時未進行任何檢查。

    SQLJ 為處理 SQL 語句提供了一種簡化的方式。現在無需編寫不同的方法調用來綁定每個輸入參數和獲取每個選擇列表項,而只需編寫一條使用 Java 宿主變量的 SQL 語句。SQLJ 會替您完成綁定。

    然而,JDBC 提供了對 SQL 語句的執行的細粒度控制,并提供了真正的動態 SQL 能力。如果應用程序需要動態能力(在運行時發現數據庫或實例元數據),那么應該使用 JDBC。

    回頁首

    為 SQLJ 建立 WebSphere Studio Application Developer 項目

    如果您計劃將 SQLJ 代碼包括到所有 WebSphere Studio Application Developer (Application Developer) 項目中,那么需要使您的項目支持 SQLJ。為此,可以右擊項目并選擇 Add SQLJ Support。這將彈出 SQLJ 向導,如下所示。

    圖 1. 使 Application Developer 項目支持 SQLJ

    回頁首

    SQLJ 和 Java 應用程序

    從 Application Developer 主菜單中,選擇 File -> New -> Other ,然后選擇 Java Java Project。單擊 Next。

    圖 2. 創建 Java 項目

    輸入項目名,單擊 Next。

    圖 3. 輸入 Java 項目名

    選擇 Finish 創建該項目。

    圖 4. 輸入 Java 項目設置

    為了讓 Java 應用程序能夠成功運行,還需添加 DB2 JDBC 驅動程序 db2java.zip。右擊 Java 項目,選擇 Properties。

    圖 5. 編輯 Java 項目屬性

    接下來,選擇 Java Build path,然后選擇 Libraries 標簽頁。然后選擇 Add External JARs。

    圖 6. 添加外部 JAR —— db2java.zip

    完成這些設置后,庫路徑應該如下所示:

    圖 7. 添加外部 JAR —— db2java.zip

    接下來的步驟是創建有關 Java 類,用于容納主方法。為此,需要右擊 Java 項目,然后選擇 New -> Class。填入包名和類名。另外,確保勾選了關于創建主方法的復選框。單擊 Finish

    圖 8. 創建 Java 主類

    最后,需要創建 SQLJ 文件。從 Application Developer 主菜單中,選擇 File -> New -> Other,然后選擇 Data -> SQLJSQLJ File。最后單擊 Next。Application Developer 將保證 SQLJ 文件被轉換成一個 Java 文件。

    圖 9. 選擇 SQLJ 文件向導

    填入包名和文件名。然后單擊 Finish。

    圖 10. 創建 SQLJ 文件

    至此,還需要將代碼添加到 Java 主方法中,另外必須創建一個 SQLJ 方法。首先讓我們明確要完成什么。我們將創建一個 SQLJ 方法,該方法從 DB2 SAMPLE 數據庫中根據給定的雇員號讀取一個雇員記錄。這個 SQLJ 方法以雇員號(一個 Java String)作為輸入,并將其作為參數傳遞給一條 SQLJ Select 語句。Java 主方法將調用這個 SQLJ 方法。

    清單 1. 包含主方法的 Java 類

    <![CDATA[
    /*
    * Created on Nov 27, 2004
    *
    */
    package com.ibm.sqlj.main;
    import com.ibm.sqlj.Select;
    /**
    * @author Owen Cline
    *
    */
    public class SQLJJave {
    public static void main(String[] args) {
    Select select = new Select();
    select.selectEmployee("000110");
    }
    }
    ]]>

    清單 2. 包含 SQLJ 方法的 SQLJ 類

    <![CDATA[
    /*
    * Created on Nov 27, 2004
    *
    */
    package com.ibm.sqlj;
    import java.sql.*;
    import sqlj.runtime.ref.*;
    /**
    * @author Owen Cline
    *
    */
    public class Select {
    // First, load the JDBC driver
    static
    { try
    { Class.forName ("COM.ibm.db2.jdbc.app.DB2Driver").newInstance ();
    } catch (Exception e)
    { System.out.println ("\n Error loading DB2 Driver...\n");
    System.out.println (e);
    System.exit(1);
    }
    }
    public void selectEmployee(String empNo) {
    Connection con = null; DefaultContext ctx = null; try {
    String firstName = null;
    String lastName = null;
    // use the DB2 SAMPLE database
    String url = "jdbc:db2:SAMPLE";
    // Get the connection
    con = DriverManager.getConnection(url); // Set the default context
    ctx = new DefaultContext(con); DefaultContext.setDefaultContext(ctx);
    // Lookup the employee given the employee number
    #sql { SELECT FIRSTNME, LASTNAME INTO :firstName, :lastName
    FROM EMPLOYEE
    WHERE EMPNO = :empNo } ;
    System.out.println ("Employee " + firstName + " " + lastName);
    ctx.close();
    con.close();
    }
    catch( Exception e )
    {
    System.out.println (e);
    }
    }
    }
    ]]>

    現在便可以運行這個 Java 應用程序了。選中您的 Java 項目,然后從 Application Developer 主菜單中選擇 Run -> Run As -> Java Application。您應該可以看到在控制臺 "Employee VINCENZO LUCCHESSI" 中打印出如下消息。

    回頁首

    SQLJ 和 J2EE 應用程序

    您可能想到,還可以在 J2EE 應用程序、servlet、會話 bean、BMP 實體 bean 和 MDB bean 中使用 SQLJ。現在我們要做的就是將我們創建的在 Java 應用程序中運行的上述代碼移植,使之在一個會話 bean 中運行。

    首先,需要創建一個 EJB 項目。從 Application Developer 主菜單中,選擇 File- > New -> Project。 然后選擇 EJB and EJB Project。單擊 Next。

    圖 11. 創建 EJB Project

    確保選擇了 Create 2.0 EJB Project ,然后單擊 Next。

    圖 12. 選擇一個 EJB 版本

    現在,輸入 SQLJSession 作為 EJB 項目名。EAR 項目應該是 DefaultEAR。單擊 Next。

    圖 13. 輸入 EJB 項目名

    在 Module Dependencies 對話框中,選擇 Finish 創建 EJB 項目和 EAR 項目。

    圖 14. 輸入 EJB 模塊依賴

    在這里,我們還想創建一個會話 Bean。 選擇 Application Developer 主菜單中的 File -> New -> Enterprise Bean。然后單擊 Next。

    圖 15. 創建一個會話 Bean —— 步驟 1

    確保選擇了 Session bean 單選按鈕,并輸入了一個 Bean 名稱。然后單擊 Next

    圖 16. 創建一個會話 Bean —— 步驟 2

    確保選中 Local client view 復選框,以得到本地接口(如果 EJB 容器部署在本地,那么這樣做會更快一些),然后單擊 Finish 創建會話 Bean。

    圖 17. 創建一個會話 Bean - 步驟 3

    現在我們來創建一個 SQLJ 文件,該文件將包含我們的業務邏輯。右擊 EJB 項目 SQLJSession 并選擇 New -> Other,然后選擇 Data -> SQLJSQLJ File。最后單擊 Next

    圖 18. 創建 SQLJ 文件 —— 步驟 1

    輸入包名和文件名,然后選擇 Finish 創建 SQLJ 文件。還應注意的是,由于是在一個項目中創建這個 SQLJ 文件,而這個項目還沒有添加 SQLJ 支持,因此這一次需添加該支持。

    接著,使用上述步驟創建第二個 SQLJ 文件,文件名為 SessionBeanSelectUsingDefaultDatasource,以便以后演示如何使用 defaultDataSource?,F在,我們可以在創建的 SQLJ 文件中添加自己的業務邏輯,如下所示:

    圖 19. 創建 SQLJ File —— 步驟 2

    清單 3. SessionBeanSelect.sqlj

    <![CDATA[
    package com.ibm.sqlj;
    import java.sql.*;
    import sqlj.runtime.ref.*;
    import javax.sql.DataSource;
    /**
    * @author Owen Cline
    *
    */
    public class SessionBeanSelect {
    // Setup datasource to use. Notice that I am not using a global JNDI name // but instead using a Resource Reference which points to the global JNDI name. // This is a best practice.
    #sql public static context Ctx with (dataSource="java:comp/env/sqljDS");
    public void selectEmployee(String empNo) {
    String firstName = null;
    String lastName = null;
    try {
    // Create context
    Ctx conCtx = new Ctx();
    // Lookup the employee given the employee number
    #sql [conCtx] { SELECT FIRSTNME, LASTNAME INTO :firstName, :lastName
    FROM EMPLOYEE
    WHERE EMPNO = :empNo } ;
    System.out.println ("SessionBeanSelect-Employee " + firstName + " " + lastName);
    conCtx.close();
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    }
    ]]>

    清單 4. SessionBeanSelectUsingDefaultDatasource.sqlj

    <![CDATA[
    package com.ibm.sqlj;
    import java.sql.*;
    import sqlj.runtime.ref.*;
    import javax.sql.DataSource;
    /**
    * @author Owen Cline
    *
    */
    public class SessionBeanSelectUsingDefaultDatasource {
    public void selectEmployee(String empNo) {
    String firstName = null;
    String lastName = null;
    try {
    // Lookup the employee given the employee number
    #sql { SELECT FIRSTNME, LASTNAME INTO :firstName, :lastName
    FROM EMPLOYEE
    WHERE EMPNO = :empNo } ;
    System.out.println ("SessionBeanSelectUsingDefaultDatasource-Employee " + firstName + " " + lastName);
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    }
    ]]>

    現在,我們要添加 bean 模塊,以便調用 SQLJ 文件中的業務邏輯。編輯 SQLJSessionBeanBean.java 文件,添加兩個方法:selectEmployee 和 selectEmployeeUsingDefaultDatasource,如以下清單所示。然后,別忘了使這兩個方法成為本地接口。最后,在進入下一步之前,確保生成了部署和 RMIC 代碼。

    清單 4. SQLJSessionBeanBean.java

    <![CDATA[
    package com.ibm.sqlj.ejb.session;
    import com.ibm.sqlj.SessionBeanSelect;
    import com.ibm.sqlj.SessionBeanSelectUsingDefaultDatasource;
    /**
    * Bean implementation class for Enterprise Bean: SQLJSessionBean
    */
    public class SQLJSessionBeanBean implements javax.ejb.SessionBean {
    private javax.ejb.SessionContext mySessionCtx;
    /**
    * getSessionContext
    */
    public javax.ejb.SessionContext getSessionContext() {
    return mySessionCtx;
    }
    /**
    * setSessionContext
    */
    public void setSessionContext(javax.ejb.SessionContext ctx) {
    mySessionCtx = ctx;
    }
    /**
    * ejbCreate
    */
    public void ejbCreate() throws javax.ejb.CreateException {
    }
    /**
    * ejbActivate
    */
    public void ejbActivate() {
    }
    /**
    * ejbPassivate
    */
    public void ejbPassivate() {
    }
    /**
    * ejbRemove
    */
    public void ejbRemove() {
    }
    /**
    * selectEmployee
    */
    public void selectEmployee(String empNo) {
    SessionBeanSelect sbs = new SessionBeanSelect();
    sbs.selectEmployee(empNo);
    }
    /**
    * selectEmployee
    */
    public void selectEmployeeUsingDefaultDatasource(String empNo) {
    SessionBeanSelectUsingDefaultDatasource sbs = new SessionBeanSelectUsingDefaultDatasource();
    sbs.selectEmployee(empNo);
    }
    }
    ]]>

    為最終測試我們的會話 Bean,必須創建一個 Server Configuration。切換到 Server Perspective,并在 Server Configuration 視圖中單擊右鍵。選擇 New -> Server and Server Configuration。輸入服務器名 TestServer ,然后單擊 Finish 創建該服務器。

    圖 20. 創建一個 Server Configuration

    創建好服務器后,在服務器上單擊右鍵(同樣也是在 "Server Configuration" 視圖中),然后選擇 Add and Remove Projects。 在 "Add and Remove Projects" 對話框中(這里沒有顯示出來),添加 DefaultEAR 項目并單擊 Finish。

    最后要做的是創建我們的會話 Bean 將要使用的 DB2 數據源。在 Server Configuration 視圖中右擊 Test Server,這將彈出服務器配置編輯器。選擇 Security 標簽頁,然后選擇下面顯示的 JAAS Authentication Entries 對話框旁邊的 Add 按鈕。為該條目輸入一個名稱,然后輸入一個用于訪問數據庫的合法用戶名和密碼。最后單擊 OK。

    圖 21. 添加 JAAS 認證條目

    現在,選擇 Data source 標簽頁。在 JDBC Provider 列表中選擇 Default DB2 JDBC Provider 條目。單擊在上面所選 JDBC 提供者中定義的數據源旁邊的 Add 按鈕。確保選中了 DB2 JDBC ProviderVersion 5.0 data source 單選按鈕。然后單擊 Next。

    圖 22. 選擇要創建的數據源的類型

    輸入 sqljDS 作為數據源名稱,輸入 jdbc/sqljDS 作為 JNDI 名稱。對于 "Component-managed authentication alias" 和 "Container-managed authentication alias",都選擇前面創建的 JAAS Authentication Entry。然后單擊 Finish。

    圖 23. 輸入 sqljDS 的數據源參數

    重復這些步驟,創建另一個名為 defaultDataSource 的數據源,數據源的 JNDI 名稱為 jdbc/defaultDataSource。最后,保存該服務器配置。

    圖 24. 輸入 defaultDataSource 的數據源參數

    現在,我們需要創建一個 Resource Reference,以便會話 bean 可以查找 sqljDS 數據源。因此,切換到 Application Developer 中的 J2EE Perspective。在 J2EE Hierarchy 視圖中,右擊 SQLJSession EJB 項目,以調用 EJB Deployment Descriptor 編輯器。選擇 References 標簽頁。選擇 SQLJSessionBean 并選擇 Add 按鈕。選擇 Resource Reference 單選按鈕,然后單擊 Next。

    圖 25. 創建資源引用

    輸入 sqljDS 作為名稱。選擇 javax.sql.DataSource 作為類型。為 Authentication 選擇 Container 。 保留 Sharing Scope 為 Shareable。然后單擊 Finish

    圖 26. 輸入資源引用參數

    選中剛創建的資源引用,然后輸入 jdbc/sqljDS 作為 JNDI 名。保存該 EJB 部署描述文件。

    圖 27. 輸入資源引用的 JNDI 名

    至此,您應該可以測試會話 Bean 模塊了。首先,在 Server Perspective 中,通過在 Servers 視圖中右鍵單擊 TestServer 并選擇 Start 來啟動該服務器。接著,通過在 Servers 視圖中單擊右鍵并選擇 Run universal test client 調用 Universal Test Client。從這個 universal test client 中,選擇 JNDI Explorer 并展開 "jdbc" 菜單,以顯示出兩個數據源:sqljDS 和 defaultDataSource。接下來,完全展開 Local EJB beans 菜單,直到能夠選擇 SQLJSessionBeanLocalHome。在 EJB reference 菜單中完全展開菜單項,直到能夠選擇 SQLJSessionBeanLocal.create() 模塊,然后選擇 Invoke followed by the Work with Object 按鈕。

    圖 28. 調用 SQLJSessionBeanLocal.create() 方法

    現在,您將看到有兩個方法可供調用:selectEmployee 和 selectEmployeeUsingDefaultDatasource。選擇 selectEmployee 方法。輸入 000110 作為 empNo 值,并選擇 Invoke 按鈕。檢查控制臺窗口,以確信顯示了 "[11/28/04 16:56:05:176 PST] 6d2f338b SystemOut O SessionBeanSelect-Employee VINCENZO LUCCHESSI"。最后,您自己嘗試一下 selectEmployeeUsingDefaultDatasource 方法。

    圖 29. 調用 selectEmployee() 方法

    回頁首

    結束語

    總之,對于不需要動態 SQL 的 Java 和 J2EE 應用程序,SQLJ 是提供持久性框架的一種非常有用的方式。雖然本文沒有提到,但使用 SQLJ 開發存儲過程也是可行的。

    回頁首

    下載

    描述 名字 大小 下載方法

    code samples

    SQLJArticle_sourcecode.zip

    3443 KB

     

    FTP

    |

    HTTP

    關于下載方法的信息

    Get Adobe® Reader®

    參考資料

    關于作者

    Owen Cline 是位于加州圣地亞哥市的 IBM Software Services for Websphere 小組的一名成員。他有 20 多年軟件開發領域的開發經驗。他擁有 4 項軟件專利,編寫了大量 IBM 紅皮書,并曾多次出席各種技術會議。在過去的 5 年當中,Owen 專門從事 J2EE 架構、應用開發和部署,重點研究了 WebSphere 平臺。此外,這幾年來,他還參與了許多高知名度的 Web 站點的開發。

     

    源文檔 <http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0412cline/index.html>

     

    posted on 2007-07-09 21:51 dyerac in java... 閱讀(1066) 評論(0)  編輯  收藏 所屬分類: 轉載學習區
     
    Copyright © dyerac in java... Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲乱码在线观看| 亚洲精品视频免费看| 亚洲日韩精品无码专区加勒比☆| 在线免费观看亚洲| 亚洲高清日韩精品第一区| 久久99精品视免费看| 久久亚洲私人国产精品| 亚洲人成免费网站| 亚洲一级黄色大片| 嫩草影院免费观看| 极品色天使在线婷婷天堂亚洲| 国产精品嫩草影院免费| 精精国产www视频在线观看免费| 亚洲中文字幕不卡无码| 日本高清不卡aⅴ免费网站| 亚洲国产精品第一区二区| 啦啦啦完整版免费视频在线观看| 亚洲丰满熟女一区二区v| 黄a大片av永久免费| 深夜特黄a级毛片免费播放| 中文字幕亚洲无线码a| 小日子的在线观看免费| 亚洲精品福利你懂| 国产一级淫片视频免费看| 一级做a爰片久久毛片免费看| 久久精品国产精品亚洲精品| 精品免费人成视频app | 免费爱爱的视频太爽了| 白白色免费在线视频| 国产亚洲精品一品区99热| 日本阿v免费费视频完整版| 极品色天使在线婷婷天堂亚洲| 亚洲日韩精品一区二区三区| 免费观看美女用震蛋喷水的视频| 亚洲精品欧美综合四区| 久久亚洲国产成人影院网站| www视频在线观看免费| 成人国产网站v片免费观看| 久久亚洲日韩精品一区二区三区 | 一级一级毛片免费播放| 久久综合亚洲色HEZYO社区|