国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

DB2 9:打開通往 XML 之門

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

DB2 9 提供了 Java 應(yīng)用程序開發(fā)人員很容易上手的新的 XML 支持。這是因?yàn)?DB2 9 允許程序員使用熟悉的 JDBC 語句和業(yè)界標(biāo)準(zhǔn)的查詢語言來查詢、插入、更新和刪除 XML 數(shù)據(jù)以及傳統(tǒng)的 SQL 數(shù)據(jù)。

在本文中,我將展示關(guān)于如何使用 Java 構(gòu)建采用 DB2 “pureXML” 技術(shù)的應(yīng)用程序的詳細(xì)例子,pureXML 技術(shù)允許以 XML 固有的分層格式存儲和查詢 XML。

DB2 的 XML 支持

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

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

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

設(shè)置環(huán)境

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

 DB2 9:打開通往 XML 之門

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

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

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

為了使用 DB2 Developer Workbench 編譯和運(yùn)行 DB2 XML 應(yīng)用程序,需要按照標(biāo)準(zhǔn)的 Eclipse 過程來創(chuàng)建一個新的 Java 項(xiàng)目,并將適當(dāng)?shù)?DB2 庫包括在項(xiàng)目的構(gòu)建路徑中。如果您之前沒有使用過 Eclipse,那么下面是對如何完成這些任務(wù)作了一個簡短的概述:

啟動 DB2 Developer Workbench。 創(chuàng)建一個新項(xiàng)目。切換到 Java 透視圖( Window → Open Perspective → Java),并選擇 File → New → Project。根據(jù)向?qū)У奶崾局付ㄒ粋€項(xiàng)目名。對于其他項(xiàng),則保留默認(rèn)設(shè)置。 將 DB2 庫添加到項(xiàng)目的構(gòu)建路徑中。選中您的項(xiàng)目,單擊右鍵,然后選擇 Properties。選擇 Java Build Path,并單擊 Libraries 標(biāo)簽頁。添加適當(dāng)?shù)?DB2 外部 .jar 文件,例如 db2jcc.jar、db2jcc_javax.jar 和 db2jcc_license_cu.jar。這些文件位于 DB2 安裝目錄的 java 子目錄中。 還可以選擇為應(yīng)用程序創(chuàng)建一個包。選中您的項(xiàng)目,單擊右鍵,然后選擇 New → Package。

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

連接到數(shù)據(jù)庫

要使用 DB2 XML 數(shù)據(jù),需要建立到目標(biāo)數(shù)據(jù)庫的連接,對于其他 DB2 應(yīng)用程序也是如此。清單 2 是一個用于建立 DB2 數(shù)據(jù)庫連接的助手方法的代碼片段。

插入 XML 數(shù)據(jù)

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

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

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

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

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

DB2 還允許用戶注冊 XML 模式,并且還允許用戶在插入之前用這些模式來驗(yàn)證輸入文檔,不過這個特性在上述代碼中沒有體現(xiàn)出來。XML 模式是萬維網(wǎng)聯(lián)盟(W3C)業(yè)界標(biāo)準(zhǔn)的一部分;XML 模式使用戶可以指定符合規(guī)范的 XML 文檔應(yīng)有的結(jié)構(gòu),例如可接受的 XML 元素的順序和數(shù)據(jù)類型,特定 XML 名稱空間的使用,等等。

查詢 XML 數(shù)據(jù)

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

基于關(guān)系謂詞和 XML 謂詞過濾數(shù)據(jù) 檢索符合條件的 XML 文檔的某些部分以及存儲在傳統(tǒng) SQL 列中的數(shù)據(jù)。

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

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

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

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

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

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

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

編程提示

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

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

DB2 Developer Workbench 中有一些用于幫助程序員圖形化地構(gòu)造 SQL/XQuery 查詢和 XQuery 查詢的向?qū)АK€提供了用于構(gòu)建操縱傳統(tǒng) SQL 數(shù)據(jù)或本地 XML 數(shù)據(jù)的存儲過程的向?qū)АK邢驅(qū)Ф伎梢栽?workbench 的 Data 透視圖中啟動。

要獲得關(guān)于所有這些專題的詳細(xì)信息,請參閱相應(yīng)的在線文檔或本文后面列出的參考資料。

新鮮,但是熟悉

需要處理存儲在 DB2 中的本地 XML 數(shù)據(jù)的 Java 程序員可以使用熟悉的 JDBC 語句來執(zhí)行查詢和處理結(jié)果。為幫助程序員編寫、測試和調(diào)試他們的 Java 應(yīng)用程序,IBM 提供了一個基于 Eclipse 的 Developer Workbench for DB2。這個 workbench 提供了用于查看數(shù)據(jù)庫內(nèi)容、用 SQL/XML 或 XQuery 編寫查詢以及生成存儲過程的向?qū)А?/P>

標(biāo)簽: DB2 數(shù)據(jù)庫
主站蜘蛛池模板: 精品欧美高清一区二区免费 | 三级全黄的全黄三级三级播放 | 午夜在线观看cao | 一级做性色a爱片久久片 | 日韩欧美中文字幕在线播放 | 久久久久久一级毛片免费无遮挡 | 午夜免费福利网站 | 99国产精品高清一区二区二区 | 9999视频| 91最新网站 | 成年人网站免费观看 | 一级毛片免费完整视频 | 国产一区二区三区高清视频 | 亚洲综合色一区二区三区另类 | 日韩成人在线视频 | 欧美18在线| japanese日本舒服丰满 | 欧美色xxxx | 亚洲免费观看视频 | 成人免费黄色网址 | 免费观看亚洲视频 | 日韩精品在线免费观看 | 欧美精品亚洲一区二区在线播放 | 一级毛片在线完整免费观看 | 久久久久依人综合影院 | 欧美成人性色大片在线观看 | 飘花国产午夜精品不卡 | 日本亲子乱子伦视频 | 国产日产欧美a级毛片 | 久久黄网站| 中文字幕一区日韩在线视频 | 免费人成在观看 | 香港三澳门三日本三级 | 成人毛片高清视频观看 | 大臿蕉香蕉大视频成人 | 美女张开腿黄网站免费国产 | 99精品一区二区三区 | 成年人在线观看视频免费 | 国产成a人亚洲精v品久久网 | 欧美国产日韩在线 | 一区二区三区观看 |