国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

XML——連接SQL和Web程序的橋梁(圖)

2019-11-18 12:48:33
字體:
來源:轉載
供稿:網友

  摘要
  
  過去幾年xml技術作為Internet上交換信息的格式受到了極大的歡迎。今天XML經常被描述成一種孤立的技術,但它最初誕生的時候卻是一種(介于Html和SGML之間的)Internet技術。本文討論XML如何被用作數據庫和最終用戶間的“通訊協議”。
  
  當前最流行的關系數據庫治理系統用SQL查詢語言來與數據打交道。雖然面向XML(XML-oriented)的數據庫已經面市,卻不常見。而XML如此流行,關系數據庫開發者也在為產品增加XML兼容性的過程中學習進步。本文考察其中一種途徑:讓數據庫返回XML。示范代碼中用到了一個Oracle數據庫,它被假定是XML兼容的,能處理XML數據。
  
  本文分為兩部分。第一部分預備和Oracle數據庫打交道的java代碼:提交一個SQL查詢,獲取一個XML輸出;第二部分專注于一個web程序:將從數據庫獲取的XML數據輸出為HTML文本。
  
  要求
  
  本文中用到下列軟件:
  
  BEA WebLogic Platform 8.1 with SP4 ——作應用程序服務器。
  
  Oracle 10g Database Server ——作數據庫服務器。你可以用不同版本的服務器來試驗代碼;據我們所知,本方案不需要特定的版本。
  
  Oracle XML-SQL Utility (XSU) ——XSU是一組充當PL/SQL包裝(wrapper)的Java類,它答應查詢返回XML包裝起來的結果集或對象。
  
  Oracle XML Parser, Version 2 ——Oracle的基于Java校驗XML有效性的解析器(parser),支持XSL。一般來講XSU和XML解析器是Oracle Developer Suite的一部分。
  
  本文中的代碼在微軟Windows xp系統上運行,但只需要很小的改動也應該能在任何操作系統上正確工作。
  
  我們假定讀者是有經驗的Java開發者,熟悉BEA WebLogic Server,并且有JDBC編程經驗。
  
  預備連接池(Connection Pool)和數據源
  
  假如你熟悉JDBC連接池和數據源的配置,請跳過這一節。
  
  首先需要配置連接池和數據源。代碼稍后會用JNDI來獲取數據源,這需要一點配置。我們要配置一個JDBC連接池來保持和數據庫的連接。登入WebLogic的控制臺并選擇Service Configurations -> JDBC -> Connection Pools節點。
  
  現在選擇“Configure a new JDBC Connection Pool...”以創建一個新的連接池,在接下來的畫面里選擇數據庫類型和驅動(圖1)。
  
 XML——連接SQL和Web程序的橋梁(圖)(圖一)

  
圖1. JDBC連接池:選擇數據庫

  
  可以看到多種不同數據庫可供選擇。我們需要的數據庫類型(Database Type)是Oracle,并且將使用BEA的Oracle Driver(Type 4)。然后點“Continue”按鈕定義連接屬性(圖2)。
  
 XML——連接SQL和Web程序的橋梁(圖)(圖二)

  
圖2. JDBC連接池:連接屬性

  
  在這個畫面中,為JDBC連接池選擇一個名字,并設置其它諸如數據庫名和主機名、連接端口和口令等數據庫參數。
  
  這里并不創建一個新數據庫和一組表,我們將使用Oracle的示例SCOTT/TIGER模式(schema)和EMP表。幾乎每個Oracle安裝中都有這個示例,因此不需要你再去配置。假如沒有EMP表或者這個表是空的,可以用Oracle目錄下的/sqlplus/demo/demobld.sql腳本重建這個表并裝入數據,還可以用/sqlplus/demo/demodrop.sql刪除原有的值。
  
  配置好這些參數之后點“Continue”(圖3)。
  
 XML——連接SQL和Web程序的橋梁(圖)(圖三)

  
圖3. JDBC連接池:連接測試

  
  一般情況不必對這一頁做任何改動,這是一個連接測試頁(可以點“Skip This Step”跳過)。WebLogic Server顯示了驅動類名、(JDBC驅動使用的)URL和身份驗證(用戶名和密碼)以供核對。復核完這些參數后預備測試,點“Test Driver Configuration”按鈕,假如一切正確,將看到“Connection SUCcessful”的信息。最后點“Create and deploy”按鈕完成JDBC連接池配置。
  
  完成了JDBC連接池的工作,現在我們需要創建相應的數據源。回到WebLogic Server控制臺的主頁,按照這個順序選擇:Service Configurations -> JDBC -> Data Source。在接下來的畫面中點擊“Configure a new JDBC Data Source”鏈接,將看到數據源配置成功頁(圖4)。
  
 XML——連接SQL和Web程序的橋梁(圖)(圖四)

  
圖4. 數據源配置成功頁

  
  要定義JDBC數據源名稱和能找到數據源的地方——JNDI路徑。務必記住JNDI路徑,稍后將用它來建立一個與我們代碼的連接。接下來選擇“Continue”,然后選擇正確的連接池和數據源關聯。選中剛剛創建的連接池,再點“Continue”,下一頁答應你選擇部署數據源的服務器和簇。從列表里選中需要的一個,接著點“Create”。數據源已經創建好,我們預備寫代碼了。
  
  預備獨立(Stand-Alone)Java程序的環境
  
  讓我們給即將編寫的小客戶程序預備一個環境。為了能執行SQL查詢和獲取XML數據作為輸出,將用到Oracle XML-SQL utility (XSU),需要配置環境變量CLASSPATH指向Oracle XML-SQL Utility的庫(library)和Oracle XML解析器。一般情況下XSU可以在Oracle的目錄/rdbms/jlib/xsu12.jar找到,XML 解析器在/lib/xmlparserv2.jar。還有我們在使用JNDI,需要在CLASSPATH中包括weblogic.jar文件,一般在WebLogic Server的安裝目錄下:/bea/weblogic81/server/lib/weblogic.jar。
  
  典型的CLASSPATH 看起來會像下面這樣:
  
  CLASSPATH=c:/PRogram Files/java/jdk1.5.0_01/lib;.;
  C:/DevSuiteHome/rdbms/jlib/xsu12.jar;
  C:/DevSuiteHome/lib/xmlparserv2.jar;
  C:/bea/weblogic81/server/lib/weblogic.jar;
  
  考察獨立Java程序的代碼
  
  在展示代碼前,注重到Oracle中有兩種處理XML的方法是有意義的。二者的區別很大,你應該采用適合你手頭任務的辦法。第一種辦法是用Oracle的XSU,答應從任何SQL查詢返回XML;第二種辦法是用Oracle的XMLType列類型(column type)。
  
  XMLType列答應將XML當做數據庫中的一種本地數據類型。因此,這些列可以像其它類型的列一樣參與查詢Consequently。Oracle提供了XMLTYPE()函數來創建一個XMLType數據對象,同時還提供了其它處理這個數據類型的函數,比如XMLELEMENT()和XMLAGG()。從WebLogic Server的在線文檔(The Oracle Driver)或技術網站(Oracle Technology Network)可以讀到關于這種辦法的說明和示例。本文將專注于使用XSU的方法。
  
  下面是在Oracle數據庫上執行SQL查詢并產生XML輸出所需要的全部代碼(oraxml.java)。
  
  1. import javax.naming.*;
  2. import javax.sql.*;
  3. import java.sql.*;
  4. import oracle.xml.sql.query.*;
  5. public class oraxml
  6. {
  7.  public static void main(String args[]) throws SQLException, NamingException
  8.  {
  9.   String tabName = "emp";
  10.   int maxRows = 3;
  11.   Context ctx = new InitialContext ();
  12.   DataSource ds = (DataSource) ctx.lookup ("MyOra");
  13.   Connection conn = ds.getConnection ();
  14.   OracleXMLQuery qu = new OracleXMLQuery (        conn, "select EMPNO, ENAME from " + tabName);
  15.   qu.setMaxRows (maxRows);
  16.   qu.setRowsetTag ("EMPLOYERS");
  17.   qu.setRowTag ("PERSON");
  18.   String xmlString = qu.getXMLString();
  19.   System.out.println (xmlString);
  20.   conn.close ();
  21.  }
  22. }
  
  這段代碼很簡單。11-12行獲取一個JNDI名稱為MyOra的數據源;13和20行分別建立和關閉連接;最有意思的是14-18行執行了一個所謂的“XML查詢”;從技術上講,這是一個經XSU轉換為XML的SQL查詢;14行初始化查詢;15-17行設置XML文檔的結構,15行設定返回的最大行數不超過maxRows,16和17行設定文檔的根元素(root element)和項目分隔符(item delimiters);18行生成一個XML文檔并將其放在xmlString變量中。就像你看到的這樣,代碼很簡單易懂。(英文編者注:注重,這不是成品代碼。最后應該在一個finally語句的括號中關閉連接。)
  
  別忘記這段代碼中用到了JNDI。作為一個獨立的Java程序,必須安排一個命名提供者(naming provider)給它使用。我們將用WebLogic Server作為提供者,配置方法首先要建一個jndi.properties文件,然后確保可以從環境變量訪問這個文件。假如CLASSPATH包含當前目錄(.),就應該將jndi.properties文件放在當前目錄中。這是一個jndi.properties 文件的內容:
  
  java.naming.factory.initial=weblogic.jndi.WLInitialContextFactoryjava.naming.provider.url=t3://localhost:7001
  
  典型的編譯命令和運行結果像下面所展示的這樣(注重輸出被限制為不大于maxRows):
  
  C:/white/work/Java/xmlweb_src>javac oraxml.javaC:/white/work/Java/xmlweb_src>java oraxml<?xml version = '1.0'?><EMPLOYERS>  <PERSON num="1">   <EMPNO>7369</EMPNO>   <ENAME>SMITH</ENAME>  </PERSON>  <PERSON num="2">   <EMPNO>7499</EMPNO>   <ENAME>ALLEN</ENAME>  </PERSON>  <PERSON n

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘泉县| 凤冈县| 内丘县| 井陉县| 红原县| 海口市| 凤山市| 申扎县| 昆山市| 江华| 贵港市| 财经| 台前县| 天等县| 黑水县| 清原| 扎兰屯市| 鲁山县| 景宁| 桃江县| 尤溪县| 苏尼特右旗| 越西县| 东方市| 鄂尔多斯市| 平顺县| 自贡市| 迁安市| 宁蒗| 天长市| 甘孜县| 囊谦县| 寿阳县| 新营市| 万山特区| 高陵县| 沅陵县| 万载县| 叶城县| 潞西市| 贵溪市|