麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > XML > 正文

DB2 9:打開通往 XML 之門

2024-07-21 02:32:28
字體:
供稿:網(wǎng)友

  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 固有的分層格式存儲(chǔ)和查詢 XML。

  DB2 的 XML 支持

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

  一種 XML 數(shù)據(jù)類型,它允許 DB2 以一種經(jīng)過解析的、分層的格式存儲(chǔ) 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ì)的。
  對(duì)基于用戶提供模式驗(yàn)證 XML 數(shù)據(jù)的支持,它可以幫助管理員為 DB2 中的 XML 數(shù)據(jù)施加完整性約束。
  一些管理功能,包括對(duì)關(guān)鍵數(shù)據(jù)庫實(shí)用程序的擴(kuò)展。
  Java 程序員特別感興趣的一個(gè)新特性是 DB2 新的 Developer Workbench,它是建立在開放源代碼 Eclipse 3.1 平臺(tái)之上的。(請(qǐng)參閱 Developer Workbench 文章。)這個(gè)集成開發(fā)環(huán)境(IDE)可以幫助程序員快速開發(fā)、測(cè)試和調(diào)試他們的數(shù)據(jù)庫應(yīng)用程序。

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

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

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

 

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

  圖 1. 存儲(chǔ)在 CLIENTS 表中的示例 XML 文件

  圖 1. 存儲(chǔ)在 CLIENTS 表中的示例 XML 文件

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

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

  1.   啟動(dòng) DB2 Developer Workbench。
  2.   創(chuàng)建一個(gè)新項(xiàng)目。切換到 Java 透視圖( Window → Open Perspective → Java),并選擇 File → New → PRoject。根據(jù)向?qū)У奶崾局付ㄒ粋€(gè)項(xiàng)目名。對(duì)于其他項(xiàng),則保留默認(rèn)設(shè)置。
  3.   將 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 子目錄中。
  4.   還可以選擇為應(yīng)用程序創(chuàng)建一個(gè)包。選中您的項(xiàng)目,單擊右鍵,然后選擇 New → Package。

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

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

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

  

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

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

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

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

  

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

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

  DB2 還允許用戶注冊(cè) XML 模式,并且還允許用戶在插入之前用這些模式來驗(yàn)證輸入文檔,不過這個(gè)特性在上述代碼中沒有體現(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 允許編寫各種類型的查詢。您可以編寫用于檢索整個(gè) XML 文檔的簡(jiǎn)單查詢,也可以編寫根據(jù) XML 謂詞和關(guān)系查詢謂詞檢索 XML 文檔中的某些部分的高級(jí)查詢。DB2 還支持其他類型的一些查詢,例如將 XML 數(shù)據(jù)轉(zhuǎn)換到新的 XML 文檔,連接 XML 和非 XML 數(shù)據(jù),聚合各種類型的數(shù)據(jù),等等。在本文中,我將演示這樣一個(gè)查詢:

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

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

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

  

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

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

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

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

  

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

  編程提示

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

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

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

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

  新鮮,但是熟悉

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久欧美亚洲另类专区91大神 | 国产九九在线视频 | 久久色网站 | 青青草成人影视 | 国产精品一区二区免费在线观看 | 97porn| 欧美成年人在线视频 | 久草在线视频中文 | 黄色免费在线网址 | 一区二区久久电影 | 黄色网欧美 | 国产精品久久久久久久久久免 | 亚洲精品在线观看免费 | 国产在线区 | 国产成人精品一区二区仙踪林 | 精选久久| 久章草在线视频 | 色女人在线 | 欧美黄色性生活视频 | 成人在线观看地址 | 色屁屁xxxxⅹ在线视频 | 国产色爱综合网 | 国产精品美女久久久免费 | 国产成人在线视频播放 | 国产一国产一级毛片视频 | 国产成人综合在线观看 | 国产亚洲精品久久 | 男女羞羞视频 | 亚洲小视频在线观看,com | www.guochan| 人人舔人人射 | 久久久久久久一区 | 久久国产精品系列 | 国产成人自拍小视频 | 亚洲午夜不卡 | 日韩欧美高清一区 | 欧美精品一级 | 国产一区二区三区撒尿在线 | 天天夜夜草 | 亚洲精品午夜电影 | 91成人影库 |