dyerac |
|
|||
dyerac In Java |
公告
日歷
統(tǒng)計(jì)
導(dǎo)航常用鏈接留言簿(5)隨筆分類(49)
隨筆檔案(36)
文章分類(11)文章檔案(10)相冊dyerac搜索積分與排名
最新隨筆
最新評論
閱讀排行榜評論排行榜 |
使用 SQLJ 開發(fā)應(yīng)用程序 用 DB2 UDB V8.1 和 Application Developer V5.1.2 創(chuàng)建使用 SQLJ 的 Java 和 J2EE 應(yīng)用程序 文檔選項(xiàng) 未顯示需要 JavaScript 的文檔選項(xiàng) 級別: 初級 Owen Cline (owenc@us.ibm.com), 認(rèn)證的 IT 咨詢專家 - WebSphere 軟件服務(wù), IBM 2005 年 2 月 01 日 這篇 "how-to" 文章將解釋如何在 Java™ 應(yīng)用程序和 J2EE™ 應(yīng)用程序中使用 SQLJ。文中將介紹 SQLJ 語法,使用 SQLJ 訪問數(shù)據(jù)源,建立 WebSphere® Application Developer 項(xiàng)目以支持 SQLJ,以及創(chuàng)建和調(diào)用 DB2® 存儲(chǔ)過程。 SQLJ 概述 SQL 語句包括查詢(SELECT)、插入(INSERT)、更改(UPDATE)、刪除(DELETE)語句以及其他對存儲(chǔ)在關(guān)系數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行操作的語句。SQLJ 是在 Java 中嵌入這些 SQL 語句的一種約定,它是以某種允許編程工具對 Java 中 SQL 進(jìn)行編譯時(shí)分析的方式實(shí)現(xiàn)嵌入的,在編譯時(shí)會(huì)對 SQL 語句進(jìn)行語法檢查以保證語法的正確性,進(jìn)行類型檢查以確定 Java 和 SQL 之間交換的數(shù)據(jù)具有兼容的類型和適當(dāng)?shù)念愋娃D(zhuǎn)換,以及進(jìn)行模式檢查以確保 SQL 結(jié)構(gòu)在它們執(zhí)行時(shí)所在的數(shù)據(jù)庫模式中是格式良好的、合法的。嵌入式 SQL 語句被稱為是 "靜態(tài)的(static)",因?yàn)檫@些語句在 Java 程序中一目了然,因而嵌入式 SQL 語句隨著包含它們的 Java 程序的編譯而編譯(通常的術(shù)語是"預(yù)編譯")。我們提議將 SQLJ 作為用于緊密集成 Java/SQL 程序的一種方便有效的標(biāo)準(zhǔn)。 SQLJ 簡史 正如 Connie Tsui 在她的文章(后面有引用)中解釋的那樣,一個(gè)非正式的、開放的數(shù)據(jù)庫供應(yīng)商組織在 1997 年 4 月開始定期的會(huì)面,以便交換關(guān)于如何在 Java 編程語言中使用靜態(tài) SQL 語句和結(jié)構(gòu)的思想。主要參與者包括 IBM®、Oracle、Compaq、Informix®、Sybase、Cloudscape™ 和 Sun Microsystems。該組織將他們?yōu)橹Φ囊?guī)范命名為 JSQL。在發(fā)現(xiàn) JSQL 已經(jīng)是商標(biāo)術(shù)語后,JSQL 被更名為 SQLJ。在 1997 年 12 月,Oracle 向其他成員提供了 Java 中嵌入式 SQL 的一個(gè)參考實(shí)現(xiàn)。該參考實(shí)現(xiàn)可以在任何支持 JDK 1.1 的平臺(tái)上運(yùn)行,并且是與供應(yīng)商無關(guān)的。在 1998 年 12 月,用于在 Java 中嵌入 SQL 的規(guī)范被完全開發(fā)出來,并且被接受為 ANSI 標(biāo)準(zhǔn) Database Language —— SQL, Part 10 Object Language Bindings (SQL/OLB) ANSI x3.135.10-1998。該規(guī)范已經(jīng)被當(dāng)作 SQLJ 規(guī)范的 Part 0 供大家引用。如今它被稱作 SQL/OLB (Object Language Bindings)。 SQLJ 與 JDBC 的比較 SQLJ —— Java 數(shù)據(jù)庫應(yīng)用程序的開門咒語 SQLJ 標(biāo)準(zhǔn)現(xiàn)在為 Java 應(yīng)用程序提供了基于 SQL 的數(shù)據(jù)庫訪問。SQLJ —— Java 數(shù)據(jù)庫應(yīng)用程序的開門咒語 下面是 SQLJ 相對于直接在 JDBC 中編寫代碼的優(yōu)勢: SQLJ 程序需要的代碼行數(shù)比 JDBC 程序更少。SQL 程序更簡短,因而更易于調(diào)試。SQLJ 可以通過在編譯時(shí)使用數(shù)據(jù)庫連接,對代碼執(zhí)行語法和語義上的檢查。SQLJ 提供了對查詢結(jié)果及其他返回參數(shù)的強(qiáng)類型檢查,而 JDBC 值則是直接從 SQL 返回,在編譯時(shí)未進(jìn)行任何檢查。 SQLJ 為處理 SQL 語句提供了一種簡化的方式。現(xiàn)在無需編寫不同的方法調(diào)用來綁定每個(gè)輸入?yún)?shù)和獲取每個(gè)選擇列表項(xiàng),而只需編寫一條使用 Java 宿主變量的 SQL 語句。SQLJ 會(huì)替您完成綁定。 然而,JDBC 提供了對 SQL 語句的執(zhí)行的細(xì)粒度控制,并提供了真正的動(dòng)態(tài) SQL 能力。如果應(yīng)用程序需要?jiǎng)討B(tài)能力(在運(yùn)行時(shí)發(fā)現(xiàn)數(shù)據(jù)庫或?qū)嵗獢?shù)據(jù)),那么應(yīng)該使用 JDBC。 為 SQLJ 建立 WebSphere Studio Application Developer 項(xiàng)目 如果您計(jì)劃將 SQLJ 代碼包括到所有 WebSphere Studio Application Developer (Application Developer) 項(xiàng)目中,那么需要使您的項(xiàng)目支持 SQLJ。為此,可以右擊項(xiàng)目并選擇 Add SQLJ Support。這將彈出 SQLJ 向?qū)?,如下所示? 圖 1. 使 Application Developer 項(xiàng)目支持 SQLJ SQLJ 和 Java 應(yīng)用程序 從 Application Developer 主菜單中,選擇 File -> New -> Other ,然后選擇 Java 和 Java Project。單擊 Next。 圖 2. 創(chuàng)建 Java 項(xiàng)目 輸入項(xiàng)目名,單擊 Next。 圖 3. 輸入 Java 項(xiàng)目名 選擇 Finish 創(chuàng)建該項(xiàng)目。 圖 4. 輸入 Java 項(xiàng)目設(shè)置 為了讓 Java 應(yīng)用程序能夠成功運(yùn)行,還需添加 DB2 JDBC 驅(qū)動(dòng)程序 db2java.zip。右擊 Java 項(xiàng)目,選擇 Properties。 圖 5. 編輯 Java 項(xiàng)目屬性 接下來,選擇 Java Build path,然后選擇 Libraries 標(biāo)簽頁。然后選擇 Add External JARs。 圖 6. 添加外部 JAR —— db2java.zip 完成這些設(shè)置后,庫路徑應(yīng)該如下所示: 圖 7. 添加外部 JAR —— db2java.zip 接下來的步驟是創(chuàng)建有關(guān) Java 類,用于容納主方法。為此,需要右擊 Java 項(xiàng)目,然后選擇 New -> Class。填入包名和類名。另外,確保勾選了關(guān)于創(chuàng)建主方法的復(fù)選框。單擊 Finish。 圖 8. 創(chuàng)建 Java 主類 最后,需要?jiǎng)?chuàng)建 SQLJ 文件。從 Application Developer 主菜單中,選擇 File -> New -> Other,然后選擇 Data -> SQLJ 和 SQLJ File。最后單擊 Next。Application Developer 將保證 SQLJ 文件被轉(zhuǎn)換成一個(gè) Java 文件。 圖 9. 選擇 SQLJ 文件向?qū)?/p> 填入包名和文件名。然后單擊 Finish。 圖 10. 創(chuàng)建 SQLJ 文件 至此,還需要將代碼添加到 Java 主方法中,另外必須創(chuàng)建一個(gè) SQLJ 方法。首先讓我們明確要完成什么。我們將創(chuàng)建一個(gè) SQLJ 方法,該方法從 DB2 SAMPLE 數(shù)據(jù)庫中根據(jù)給定的雇員號讀取一個(gè)雇員記錄。這個(gè) SQLJ 方法以雇員號(一個(gè) Java String)作為輸入,并將其作為參數(shù)傳遞給一條 SQLJ Select 語句。Java 主方法將調(diào)用這個(gè) SQLJ 方法。 清單 1. 包含主方法的 Java 類 <![CDATA[ 清單 2. 包含 SQLJ 方法的 SQLJ 類 <![CDATA[ 現(xiàn)在便可以運(yùn)行這個(gè) Java 應(yīng)用程序了。選中您的 Java 項(xiàng)目,然后從 Application Developer 主菜單中選擇 Run -> Run As -> Java Application。您應(yīng)該可以看到在控制臺(tái) "Employee VINCENZO LUCCHESSI" 中打印出如下消息。 SQLJ 和 J2EE 應(yīng)用程序 您可能想到,還可以在 J2EE 應(yīng)用程序、servlet、會(huì)話 bean、BMP 實(shí)體 bean 和 MDB bean 中使用 SQLJ?,F(xiàn)在我們要做的就是將我們創(chuàng)建的在 Java 應(yīng)用程序中運(yùn)行的上述代碼移植,使之在一個(gè)會(huì)話 bean 中運(yùn)行。 首先,需要?jiǎng)?chuàng)建一個(gè) EJB 項(xiàng)目。從 Application Developer 主菜單中,選擇 File- > New -> Project。 然后選擇 EJB and EJB Project。單擊 Next。 圖 11. 創(chuàng)建 EJB Project 確保選擇了 Create 2.0 EJB Project ,然后單擊 Next。 圖 12. 選擇一個(gè) EJB 版本 現(xiàn)在,輸入 SQLJSession 作為 EJB 項(xiàng)目名。EAR 項(xiàng)目應(yīng)該是 DefaultEAR。單擊 Next。 圖 13. 輸入 EJB 項(xiàng)目名 在 Module Dependencies 對話框中,選擇 Finish 創(chuàng)建 EJB 項(xiàng)目和 EAR 項(xiàng)目。 圖 14. 輸入 EJB 模塊依賴 在這里,我們還想創(chuàng)建一個(gè)會(huì)話 Bean。 選擇 Application Developer 主菜單中的 File -> New -> Enterprise Bean。然后單擊 Next。 圖 15. 創(chuàng)建一個(gè)會(huì)話 Bean —— 步驟 1 確保選擇了 Session bean 單選按鈕,并輸入了一個(gè) Bean 名稱。然后單擊 Next。 圖 16. 創(chuàng)建一個(gè)會(huì)話 Bean —— 步驟 2 確保選中 Local client view 復(fù)選框,以得到本地接口(如果 EJB 容器部署在本地,那么這樣做會(huì)更快一些),然后單擊 Finish 創(chuàng)建會(huì)話 Bean。 圖 17. 創(chuàng)建一個(gè)會(huì)話 Bean - 步驟 3 現(xiàn)在我們來創(chuàng)建一個(gè) SQLJ 文件,該文件將包含我們的業(yè)務(wù)邏輯。右擊 EJB 項(xiàng)目 SQLJSession 并選擇 New -> Other,然后選擇 Data -> SQLJ 和 SQLJ File。最后單擊 Next。 圖 18. 創(chuàng)建 SQLJ 文件 —— 步驟 1 輸入包名和文件名,然后選擇 Finish 創(chuàng)建 SQLJ 文件。還應(yīng)注意的是,由于是在一個(gè)項(xiàng)目中創(chuàng)建這個(gè) SQLJ 文件,而這個(gè)項(xiàng)目還沒有添加 SQLJ 支持,因此這一次需添加該支持。 接著,使用上述步驟創(chuàng)建第二個(gè) SQLJ 文件,文件名為 SessionBeanSelectUsingDefaultDatasource,以便以后演示如何使用 defaultDataSource?,F(xiàn)在,我們可以在創(chuàng)建的 SQLJ 文件中添加自己的業(yè)務(wù)邏輯,如下所示: 圖 19. 創(chuàng)建 SQLJ File —— 步驟 2 清單 3. SessionBeanSelect.sqlj <![CDATA[ 清單 4. SessionBeanSelectUsingDefaultDatasource.sqlj <![CDATA[ 現(xiàn)在,我們要添加 bean 模塊,以便調(diào)用 SQLJ 文件中的業(yè)務(wù)邏輯。編輯 SQLJSessionBeanBean.java 文件,添加兩個(gè)方法:selectEmployee 和 selectEmployeeUsingDefaultDatasource,如以下清單所示。然后,別忘了使這兩個(gè)方法成為本地接口。最后,在進(jìn)入下一步之前,確保生成了部署和 RMIC 代碼。 清單 4. SQLJSessionBeanBean.java <![CDATA[ 為最終測試我們的會(huì)話 Bean,必須創(chuàng)建一個(gè) Server Configuration。切換到 Server Perspective,并在 Server Configuration 視圖中單擊右鍵。選擇 New -> Server and Server Configuration。輸入服務(wù)器名 TestServer ,然后單擊 Finish 創(chuàng)建該服務(wù)器。 圖 20. 創(chuàng)建一個(gè) Server Configuration 創(chuàng)建好服務(wù)器后,在服務(wù)器上單擊右鍵(同樣也是在 "Server Configuration" 視圖中),然后選擇 Add and Remove Projects。 在 "Add and Remove Projects" 對話框中(這里沒有顯示出來),添加 DefaultEAR 項(xiàng)目并單擊 Finish。 最后要做的是創(chuàng)建我們的會(huì)話 Bean 將要使用的 DB2 數(shù)據(jù)源。在 Server Configuration 視圖中右擊 Test Server,這將彈出服務(wù)器配置編輯器。選擇 Security 標(biāo)簽頁,然后選擇下面顯示的 JAAS Authentication Entries 對話框旁邊的 Add 按鈕。為該條目輸入一個(gè)名稱,然后輸入一個(gè)用于訪問數(shù)據(jù)庫的合法用戶名和密碼。最后單擊 OK。 圖 21. 添加 JAAS 認(rèn)證條目 現(xiàn)在,選擇 Data source 標(biāo)簽頁。在 JDBC Provider 列表中選擇 Default DB2 JDBC Provider 條目。單擊在上面所選 JDBC 提供者中定義的數(shù)據(jù)源旁邊的 Add 按鈕。確保選中了 DB2 JDBC Provider 和 Version 5.0 data source 單選按鈕。然后單擊 Next。 圖 22. 選擇要?jiǎng)?chuàng)建的數(shù)據(jù)源的類型 輸入 sqljDS 作為數(shù)據(jù)源名稱,輸入 jdbc/sqljDS 作為 JNDI 名稱。對于 "Component-managed authentication alias" 和 "Container-managed authentication alias",都選擇前面創(chuàng)建的 JAAS Authentication Entry。然后單擊 Finish。 圖 23. 輸入 sqljDS 的數(shù)據(jù)源參數(shù) 重復(fù)這些步驟,創(chuàng)建另一個(gè)名為 defaultDataSource 的數(shù)據(jù)源,數(shù)據(jù)源的 JNDI 名稱為 jdbc/defaultDataSource。最后,保存該服務(wù)器配置。 圖 24. 輸入 defaultDataSource 的數(shù)據(jù)源參數(shù) 現(xiàn)在,我們需要?jiǎng)?chuàng)建一個(gè) Resource Reference,以便會(huì)話 bean 可以查找 sqljDS 數(shù)據(jù)源。因此,切換到 Application Developer 中的 J2EE Perspective。在 J2EE Hierarchy 視圖中,右擊 SQLJSession EJB 項(xiàng)目,以調(diào)用 EJB Deployment Descriptor 編輯器。選擇 References 標(biāo)簽頁。選擇 SQLJSessionBean 并選擇 Add 按鈕。選擇 Resource Reference 單選按鈕,然后單擊 Next。 圖 25. 創(chuàng)建資源引用 輸入 sqljDS 作為名稱。選擇 javax.sql.DataSource 作為類型。為 Authentication 選擇 Container 。 保留 Sharing Scope 為 Shareable。然后單擊 Finish。 圖 26. 輸入資源引用參數(shù) 選中剛創(chuàng)建的資源引用,然后輸入 jdbc/sqljDS 作為 JNDI 名。保存該 EJB 部署描述文件。 圖 27. 輸入資源引用的 JNDI 名 至此,您應(yīng)該可以測試會(huì)話 Bean 模塊了。首先,在 Server Perspective 中,通過在 Servers 視圖中右鍵單擊 TestServer 并選擇 Start 來啟動(dòng)該服務(wù)器。接著,通過在 Servers 視圖中單擊右鍵并選擇 Run universal test client 調(diào)用 Universal Test Client。從這個(gè) universal test client 中,選擇 JNDI Explorer 并展開 "jdbc" 菜單,以顯示出兩個(gè)數(shù)據(jù)源:sqljDS 和 defaultDataSource。接下來,完全展開 Local EJB beans 菜單,直到能夠選擇 SQLJSessionBeanLocalHome。在 EJB reference 菜單中完全展開菜單項(xiàng),直到能夠選擇 SQLJSessionBeanLocal.create() 模塊,然后選擇 Invoke followed by the Work with Object 按鈕。 圖 28. 調(diào)用 SQLJSessionBeanLocal.create() 方法 現(xiàn)在,您將看到有兩個(gè)方法可供調(diào)用:selectEmployee 和 selectEmployeeUsingDefaultDatasource。選擇 selectEmployee 方法。輸入 000110 作為 empNo 值,并選擇 Invoke 按鈕。檢查控制臺(tái)窗口,以確信顯示了 "[11/28/04 16:56:05:176 PST] 6d2f338b SystemOut O SessionBeanSelect-Employee VINCENZO LUCCHESSI"。最后,您自己嘗試一下 selectEmployeeUsingDefaultDatasource 方法。 圖 29. 調(diào)用 selectEmployee() 方法 結(jié)束語 總之,對于不需要?jiǎng)討B(tài) SQL 的 Java 和 J2EE 應(yīng)用程序,SQLJ 是提供持久性框架的一種非常有用的方式。雖然本文沒有提到,但使用 SQLJ 開發(fā)存儲(chǔ)過程也是可行的。 下載 描述 名字 大小 下載方法 code samples SQLJArticle_sourcecode.zip 3443 KB
| 參考資料
關(guān)于作者 Owen Cline 是位于加州圣地亞哥市的 IBM Software Services for Websphere 小組的一名成員。他有 20 多年軟件開發(fā)領(lǐng)域的開發(fā)經(jīng)驗(yàn)。他擁有 4 項(xiàng)軟件專利,編寫了大量 IBM 紅皮書,并曾多次出席各種技術(shù)會(huì)議。在過去的 5 年當(dāng)中,Owen 專門從事 J2EE 架構(gòu)、應(yīng)用開發(fā)和部署,重點(diǎn)研究了 WebSphere 平臺(tái)。此外,這幾年來,他還參與了許多高知名度的 Web 站點(diǎn)的開發(fā)。
源文檔 <http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0412cline/index.html>
|
![]() |
|
Copyright © dyerac in java... | Powered by: 博客園 模板提供:滬江博客 |