日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

DB2 9:打開通往 XML 之門

瀏覽:37日期:2023-11-10 10:02:43

DB2 9 提供了 Java 應用程序開發人員很容易上手的新的 XML 支持。這是因為 DB2 9 允許程序員使用熟悉的 JDBC 語句和業界標準的查詢語言來查詢、插入、更新和刪除 XML 數據以及傳統的 SQL 數據。

在本文中,我將展示關于如何使用 Java 構建采用 DB2 “pureXML” 技術的應用程序的詳細例子,pureXML 技術允許以 XML 固有的分層格式存儲和查詢 XML。

DB2 的 XML 支持

DB2 9 為管理、存儲、查詢和索引 XML 數據提供了一些新的機制。特別地,DB2 引入了:

一種 XML 數據類型,它允許 DB2 以一種經過解析的、分層的格式存儲 XML 文檔。 新的索引技術,這種技術能提高跨 XML 文檔和在 XML 文檔內進行搜索的查詢的運行時性能。 基于業界標準的查詢語言支持,包括 SQL 的新的 XML 擴展(通常被稱作 SQL/XML)和 XQuery,后者是專為 XML 設計的。 對基于用戶提供模式驗證 XML 數據的支持,它可以幫助管理員為 DB2 中的 XML 數據施加完整性約束。 一些管理功能,包括對關鍵數據庫實用程序的擴展。Java 程序員特別感興趣的一個新特性是 DB2 新的 Developer Workbench,它是建立在開放源代碼 Eclipse 3.1 平臺之上的。(請參閱 Developer Workbench 文章。)這個集成開發環境(IDE)可以幫助程序員快速開發、測試和調試他們的數據庫應用程序。

對于本文中的例子,我將一直使用 DB2 Developer Workbench。當然,Java 程序員可以使用任何受支持的 IDE 或 Java Development Kit (JDK) 來創建 DB2 XML 應用程序。

設置環境

本文中的代碼示例引用了一個 CLIENTS 表,該表用于跟蹤關于客戶的信息。清單 1 展示了這個表的定義。

 DB2 9:打開通往 XML 之門

注意,CLIENTS 包含三個基于傳統 SQL 數據類型的列,另外還有一個基于新的名為 “XML” 的 SQL 數據類型的列。后面那個列(即 contactinfo)存儲 XML 文檔,這些 XML 文檔包括諸如客戶的郵件地址、電話號碼、電子郵件地址等之類的信息。圖 1 展示了一個這樣的 XML 文檔。

圖 1. 存儲在 CLIENTS 表中的示例 XML 文件

我將展示如何將該文件和其他信息插入到這個 DB2 表中。不過,首先我們還是來討論一下如何配置 DB2 Developer Workbench。

為了使用 DB2 Developer Workbench 編譯和運行 DB2 XML 應用程序,需要按照標準的 Eclipse 過程來創建一個新的 Java 項目,并將適當的 DB2 庫包括在項目的構建路徑中。如果您之前沒有使用過 Eclipse,那么下面是對如何完成這些任務作了一個簡短的概述:

啟動 DB2 Developer Workbench。 創建一個新項目。切換到 Java 透視圖( Window → Open Perspective → Java),并選擇 File → New → Project。根據向導的提示指定一個項目名。對于其他項,則保留默認設置。 將 DB2 庫添加到項目的構建路徑中。選中您的項目,單擊右鍵,然后選擇 Properties。選擇 Java Build Path,并單擊 Libraries 標簽頁。添加適當的 DB2 外部 .jar 文件,例如 db2jcc.jar、db2jcc_javax.jar 和 db2jcc_license_cu.jar。這些文件位于 DB2 安裝目錄的 java 子目錄中。 還可以選擇為應用程序創建一個包。選中您的項目,單擊右鍵,然后選擇 New → Package。

要查看詳細信息,可以從 workbench 的主菜單中單擊 Help。

連接到數據庫

要使用 DB2 XML 數據,需要建立到目標數據庫的連接,對于其他 DB2 應用程序也是如此。清單 2 是一個用于建立 DB2 數據庫連接的助手方法的代碼片段。

插入 XML 數據

DB2 程序員使用熟悉的 SQL INSERT 語句來將新的 XML 數據寫到包含 XML 列的表中。DB2 可以存儲最大為 2 GB 的任何格式良好的 XML 文檔。

通常,Java 程序員需要將包含在文件中的 XML 數據插入到 DB2 表中,但是,他們也可以插入來自字符串、二進制數據(包括大型對象)和 SQL 子選擇語句中的 XML 數據。

清單 3 展示了將一行插入到 CLIENTS 表中的方法。在這個例子中,contactinfo 列的 XML 文檔是從一個文件中讀取的。

我們來逐步考察這段代碼。insertFile() 方法定義了一些變量,這些變量將在 INSERT 語句中用到。前三個變量對應于 CLIENTS 表中的 ID、name 和 status 這三列。第四個變量是要插入到 contactinfo 列的 XML 文件的文件名。(為簡單起見,在這個例子中這些值是硬編碼的。)

建立了數據庫連接之后,該方法創建一個 sqlstmt 字符串,其中包含用于輸入列值的四個參數占位符。然后像通常一樣準備 INSERT 語句,并設置它的四個參數占位符。為了設置用于 XML 列的占位符,該方法打開一個 FileInputStream。它還計算被引用的 XML 文件的長度,并使用該信息作為 setBinaryStream() 方法的輸入。最后,該方法執行 INSERT 語句,將 XML 和傳統 SQL 數據插入到這個表中的一行中。

DB2 還允許用戶注冊 XML 模式,并且還允許用戶在插入之前用這些模式來驗證輸入文檔,不過這個特性在上述代碼中沒有體現出來。XML 模式是萬維網聯盟(W3C)業界標準的一部分;XML 模式使用戶可以指定符合規范的 XML 文檔應有的結構,例如可接受的 XML 元素的順序和數據類型,特定 XML 名稱空間的使用,等等。

查詢 XML 數據

現在您已經將 XML 數據插入到了 DB2 中,接下來可以查詢 XML 數據了。DB2 允許編寫各種類型的查詢。您可以編寫用于檢索整個 XML 文檔的簡單查詢,也可以編寫根據 XML 謂詞和關系查詢謂詞檢索 XML 文檔中的某些部分的高級查詢。DB2 還支持其他類型的一些查詢,例如將 XML 數據轉換到新的 XML 文檔,連接 XML 和非 XML 數據,聚合各種類型的數據,等等。在本文中,我將演示這樣一個查詢:

基于關系謂詞和 XML 謂詞過濾數據 檢索符合條件的 XML 文檔的某些部分以及存儲在傳統 SQL 列中的數據。

DB2 目前支持兩種查詢語言:SQL 和 XQuery。一個應用程序可以包含用其中一種或兩種語言編寫的不同查詢。XQuery 不支持參數占位符。實際上,這意味不需要硬編碼查詢謂詞的 Java 應用程序中的 XQuery 查詢,必須被包裝在一個使用 SQL/XML 函數(例如 XMLQuery()、XMLExists() 或 XMLTable())的 SQL 語句中。本文中的示例應用程序使用 XMLQuery() 和 XMLExists() 來闡釋一個常見的編程任務:檢索 XML 文檔的某些部分。

清單 4 中展示的例子返回居住在郵政編碼為 95125 的地區的 “黃金(Gold)” 客戶的姓名和首選電子郵件地址。客戶姓名和狀態信息(例如 “Gold” 或 “Silver”)存儲在 SQL VARCHAR 列,而電子郵件地址和郵政編碼則包含在存儲在 contactinfo 列中的 XML 文檔中。因此,這個例子同時涉及到傳統 SQL 數據和 XML 數據。

對于查詢變量中定義的查詢語句有必要更仔細地作一番考察,特別是那些不熟悉 SQL/XML 和 XQuery 的讀者更要加以注意。雖然對這些語言作徹底的討論已超出了本文的范圍,不過我們將詳細分析這個查詢中的每一行,使您理解它的邏輯。

第一行指定 SQL name 列和 XMLQuery() 函數的輸入將被包括在結果集中。為了指示 DB2 檢索第一個符合條件客戶的 email 元素,代碼中包括了一個 XPath 表達式。XPath 是 XQuery 的一部分,它提供了一種在 XML 文檔層次之間進行導航的方式。這個 XPath 表達式指示 DB2 導航到每個符合條件的 XML 文檔的 Client 根元素下的第一個 email 元素。(注意,路徑表達式是大小寫敏感的)。$c 變量和 SQL FROM 子句表明這些文檔可以在哪里找到(在 CLIENTS 表的 contactinfo 列中)。

SQL WHERE 子句用于限制返回的數據。特別地,它規定返回的 XML 文檔只包括客戶狀態為某個特定值(Gold)的行中的 XML 文檔。而且,只有居住在某個特定地區(郵政編碼為 95125)的客戶的記錄才符合條件。XMLExists() 函數指定后一個限制。

在這個示例查詢中,XMLExists() 指示 DB2 確定一個給定的 XML 文檔中是否包括指定郵政編碼的客戶地址。PASSING 子句指定可以在哪里找到 XML 文檔(在 contactinfo 列中)。注意,這個 PASSING 子句中的 $x 周圍出現了轉義符(反斜杠)。這個查詢的最后一行調用 CAST() 函數來將輸入參數(用于郵政編碼)的值強制轉換為適當的 SQL 數據類型。在這個例子中,由 5 個字符組成的字符串是可以接受的。清單 5 展示了這個程序的輸出。

在這個示例輸出中,有一個符合條件的客戶(Edward Chen)沒有返回電子郵件信息。這表明他的 XML contactinfo 文檔中沒有包含 email 元素,可能是因為他在客戶簡歷表中沒有提供電子郵件地址。還應注意,雖然 Paula Lipenski 的聯系方式信息中有兩個電子郵件地址(見圖 1),但是輸出中只返回了她的一個電子郵件地址。這是因為示例應用程序顯式地指示 DB2 只檢索符合條件的客戶的第一個電子郵件地址。(見 XMLQuery() 函數中的 XPath 表達式。)如果要去掉輸入中的 <:email> 標記,那么可以使用 XMLQuery() 函數中的一個路徑表達式來指示 DB2 只返回 email 元素的文本值 $c/Client/email[1]/text()。

編程提示

雖然 DB2 的本地 XML 支持是新的,但是良好的數據庫應用程序編程實踐仍然適用。例如,指示 DB2 只檢索需要的數據這一點仍然很重要。如果只需要檢索 XML 文檔中包含的部分信息,那么檢索整個 XML 文檔就會降低性能,另外還會不必要地消耗一些系統資源。類似地,您應該仔細考慮事務的范圍和隔離級別,在整體并發性與完整性之間取得平衡。

本文是一篇介紹性的文章,因此探索 DB2 9 的 XML 特性超出了本文的范圍,但是這樣做是值得的。正如您可能期望的那樣,DB2 允許程序員使用熟悉的 SQL 語句更新和刪除 XML 數據。此外,IBM 還在 IBM developerWorks 上發布了一個用于 XML 數據的 “update” 存儲過程(“將 XML 應用程序從 DB2 8.x 遷移到 DB2 Viper,第 1 部分”;見參考資料)。這個存儲過程允許用戶只提供更改的 XML 數據來進行更新,而不必提供修改的 XML 文檔的全部內容。

DB2 Developer Workbench 中有一些用于幫助程序員圖形化地構造 SQL/XQuery 查詢和 XQuery 查詢的向導。它還提供了用于構建操縱傳統 SQL 數據或本地 XML 數據的存儲過程的向導。所有向導都可以在 workbench 的 Data 透視圖中啟動。

要獲得關于所有這些專題的詳細信息,請參閱相應的在線文檔或本文后面列出的參考資料。

新鮮,但是熟悉

需要處理存儲在 DB2 中的本地 XML 數據的 Java 程序員可以使用熟悉的 JDBC 語句來執行查詢和處理結果。為幫助程序員編寫、測試和調試他們的 Java 應用程序,IBM 提供了一個基于 Eclipse 的 Developer Workbench for DB2。這個 workbench 提供了用于查看數據庫內容、用 SQL/XML 或 XQuery 編寫查詢以及生成存儲過程的向導。

標簽: DB2 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美天堂一区| 99久久夜色精品国产亚洲狼| 国产福利资源一区| 日韩精品视频在线看| 国产亚洲午夜| 日韩视频中文| 国产亚洲在线观看| 日韩午夜精品| 尹人成人综合网| 欧美亚洲精品在线| 午夜av成人| 亚洲成av在线| av中文资源在线资源免费观看| 精品国产亚洲日本| 国产精品一区高清| 精品亚洲成人| 精品美女视频 | 国产福利亚洲| 日韩三级精品| 亚洲精品麻豆| 91精品国产自产精品男人的天堂| 日韩二区三区四区| 视频一区二区中文字幕| 首页国产欧美久久| 涩涩涩久久久成人精品| 欧美在线看片| 免费观看亚洲天堂| 精品一区二区三区视频在线播放| 色一区二区三区四区| 亚洲成人av观看| 黄色日韩在线| 亚洲有吗中文字幕| 国产精品亚洲欧美日韩一区在线| 精品91福利视频| 久久国产直播| 蜜臀va亚洲va欧美va天堂| 亚洲免费福利一区| 日韩国产欧美一区二区三区| 日韩av网站在线免费观看| 精品高清久久| 国产99精品一区| 亚洲字幕久久| 精品一区二区男人吃奶| 在线日韩中文| 日本aⅴ免费视频一区二区三区| 久久亚洲国产精品尤物| 婷婷综合六月| 亚洲a成人v| 日韩一区二区中文| 欧美日韩少妇| 在线精品一区二区| 日本欧美韩国一区三区| 国产精品色在线网站| 日韩欧美精品综合| 爽爽淫人综合网网站| 国产精品草草| 亚洲成av人片一区二区密柚| 99亚洲视频| 国产三级精品三级在线观看国产| 水蜜桃精品av一区二区| 久久国产亚洲精品| 日韩精品久久久久久| 成人片免费看| 中文字幕一区二区精品区| 欧美激情在线精品一区二区三区| 欧美 日韩 国产精品免费观看| 97久久精品| 久久一区二区三区喷水| 亚洲理论在线| 美女av在线免费看| 亚洲欧洲日韩精品在线| 亚洲精品**中文毛片| 亚洲日产国产精品| 日韩在线麻豆| 欧美一级精品| 国产乱码精品一区二区三区亚洲人| 国产一二在线播放| 亚洲3区在线| 91亚洲国产| 日韩区一区二| 91精品一区二区三区综合| 欧美日韩夜夜| 狠狠爱成人网| 国产麻豆一区| 国产一区二区精品| 日本一二区不卡| 日韩av资源网| 精品一区在线| 久久中文字幕一区二区三区| 免费看的黄色欧美网站| www.51av欧美视频| 久久国产三级| 免费人成黄页网站在线一区二区| 国产成人精品一区二区三区免费 | 亚洲欧洲午夜| 国产视频一区二| 亚洲激情偷拍| 丁香六月综合| 国产精品白丝久久av网站| 国产农村妇女精品一二区| 日韩欧美看国产| 麻豆成人av在线| 日韩精品一区二区三区中文 | 蜜臀国产一区二区三区在线播放| 色综合狠狠操| 国产精品一卡| 99在线观看免费视频精品观看| 福利一区和二区| 国产精品99久久免费观看| 喷白浆一区二区| 性欧美xxxx免费岛国不卡电影| 成人在线观看免费视频| 国产精品美女在线观看直播| 久久国产精品毛片| 午夜av一区| 日韩一区二区三区免费播放| 九九九精品视频| 国产欧美日韩综合一区在线播放| 日本 国产 欧美色综合| 香蕉国产精品| 色婷婷久久久| 欧美激情福利| 蜜桃视频免费观看一区| 亚洲女同一区| 久久中文字幕av| 日本高清不卡一区二区三区视频| 精品一区二区三区中文字幕| 国产精品久久久久久模特 | 一区在线免费观看| 欧美日韩中文字幕一区二区三区| а√天堂8资源中文在线| 精品中国亚洲| 久久一区国产| 国产一区二区亚洲| 久久国产精品美女| 欧美日韩视频免费看| 日韩一区精品| 欧美亚洲自偷自偷| 国产精品对白| 精品一区二区三区的国产在线观看 | 日韩欧美三区| 亚洲精品福利| 日本麻豆一区二区三区视频| 日本一区二区三区中文字幕| 一二三区精品| 日本va欧美va瓶| 久久国产乱子精品免费女| 欧美一级二级三级视频| 日韩成人午夜精品| 欧美三级第一页| 国产精品大片| 国产欧美一区二区三区精品酒店| 欧美aa在线观看| av在线日韩| 激情五月综合网| 国产精品普通话对白| 天堂av在线一区| 亚洲专区视频| 国产伦理久久久久久妇女| 精品一区二区三区视频在线播放| 91亚洲一区| 免费不卡中文字幕在线| 在线一区欧美| 久久伊人国产| 久久天堂影院| 伊人成人在线视频| 日韩中文影院| 97精品国产| 久久只有精品| zzzwww在线看片免费| 日韩精品a在线观看91| 日韩欧美午夜| 一区二区三区视频免费观看| 国产精品v一区二区三区| 美女视频网站久久| 黄页网站一区| 伊人久久高清| 国产毛片久久| 中文字幕一区二区三区在线视频| 91精品日本| 一区二区三区四区日本视频| 黄色成人91| 国产日本亚洲| 欧洲一区二区三区精品| 香蕉成人久久| 国产精品亚洲欧美日韩一区在线 | 国产精品一区二区三区av| 精品99久久| 免播放器亚洲| 国语精品一区| 久久精品国产大片免费观看| 一区二区三区国产盗摄| 久久中文字幕一区二区三区| 亚洲高清二区| 欧美亚洲人成在线| 91精品推荐| 欧美精品三级在线| 欧美99久久| 国产精品一区高清| 欧美69视频|