Oracle9中XML SQL Utility技術指導(java)

來源:互聯網
上載者:User


Oracle9中XML SQL Utility技術指導(java)
gui_jq 原創  (參與分:686,專家分:670)   發表:2002-12-11 上午10:29   版本:1.0   閱讀:5775

 
■    開發前要求配置
■    Select XML格式資料
■    Insert XML格式資料
■    Updata XML格式資料
■    Delete XML格式資料

開發前要求配置
必須安裝Oracle用戶端
把Classpath指向
classes111.zip
xmlparserv2.jar
xsu111.jar
xsu12.jar

Select XML格式資料
    由於兩者之間具有相近的階層資料關係,關聯式資料庫模式能XML來類比。假設一個書目列表的資料庫,BookList表設有下述列:BookID、Title、Author 、Publisher、Year、ISBN和描述。下面是應用程式對資料庫進行的典型查詢:
SELECT Title,Author,Publisher,Year,ISBN FROM BOOKLIST WHERE BOOKID=1234;
若通過Orale XML SQL Utility提交查詢,資料庫將返回下述結果:
<?xml version=’’1.0’’?>
<ROWSET>
  <ROW id=”1”>
<TITLE>The Difference Between God and Larry Ellison:Inside Oracle
    Corporation</TITLE>
<AUTHOR>Mike Wilson<AUTHOR>
<PUBLTSHER>William Morrow and Co.</PUBLISHER>
<YEAR>1997</YEAR>
<ISBN>0688149251</ISBN>
</ROWSET>
如果應用程式只想簡單地把輸出寫入到檔案,可以用字串形式輸出。如

果直接送給Oracle XML解析器用XSLT處理器進行變換,可以用DOM對象形式輸出。提供DOM輸出可以無需解析操作,否則在應用XSL轉換之前需要實施解析操作。
    如下列程式碼片段所示,通過把查詢傳遞給oranle.xml.sql.query.Oracle XML Query類進行查詢提交:
import java . sql . * ;
import java . math . * ;
import Oracle . xml . sql .query . * ;
import oracle . jdbc .* ;
import oracle . jdbc . driver . * ;
public static void main (String args[ ])throws SQLException
{
  string tabName = “Booklist” ;
  string user = “scott/tiger” ;
  DriverManager . registerDriver(new oracle . jdbc .driver .oracleDriver( )) ;
  Connection conn=
DriverManager . getConnection( “jdbc:oracle:oci8”+user+”@”) ;
  OracleXMLQuery qry = new OracleXMLQuery(conn, “select * from+tabName”);
  String xmlstring = qry . getXMLString( ) ;
  System . out .println (“OUTPUT IS :\n “+xmlstring”);
  Conn . close ( ) ;
     
    Oracle XML SQL Utility也提供可選的命令列介面,它用於產生與特殊資料庫模式相關的DTD。假定所有的內容都已正確安裝,只需要執行如下命令就可得到完整的命令列選列表:

Java oraclexml
   下面的命令列用於怎樣建立與正在查詢的特殊資料庫模式相關的DTD:
java oraclexml getxml ?scott/tiger “scott/tiger”-withDTD “SELECT” *
 
 FROM BookList”
   對於前面所說的BOOKLIST表,在該查詢產生的XML文檔中Oracle XML SQL Utility會輸出如下的DTD:

〈!ELEMENT BOOKLIST (BOOKID, Title, Author, Publisher, Year, ISBN, Description)〉
<!ELEMENT BOOKID (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Publisher (#PCDATA)>
<!ELEMENT Year (#PCDATA)>
<ELEMENT ISBN (#PPCDATA)>
<!ELEMENT Description (#PCDATA)>

Insert XML格式資料
    一旦在資料庫中建立了模式,只要XML格式的資料與從模式中產生的DTD相符,XML SQL Utility就會把資料儲存到模式中去。XML SQL Utility提供把XML文檔映射為表行的能力。該儲存使用簡易對應將元素標記名映射為列,通過預設映射,將XML字串轉換為合適的資料類型。當XML元素還有子項目時,則該XML元素被映射為SQL物件類型。
    為了儲存XML格式的資料,XML SQL Utility啟動一個插入語句,在插入語句的VALUES子句中綁定所有元素值。每個行元素的內容被映射為一個單獨值集合。
    返回到本章前面的Booklist範例,下面是儲存XML格式的項的SQL語句:
INSERT INTO BOOKLIST (BookID, TITLE, AUTHOR, PUBLISHER, YEAR, ISBN,DESCRIPTION)  VALUS (?,?,?,?,?,?,?) and BIND the values,
BOOKID  - > 1234
TITLE   - > The Difference Between God and Larry Ellison: Inside Oracle Corporation
AUTHOR  - > Mike Wilson
PUBLISHER  - > William Morrow & Co.
YEAR  - > 1997
ISBN  - > 0688149251
Description  - >  Account of Larry Ellison ;
如下範例代碼示範了Java程式中是如何完成此功能的:
import oracle.xml.sql.dml.*;
import java.sql.*;
import oracle.jdbc.driver.*;
import oracle.jdbc.*;
import java.net.*;

public class save_sample
{
  public static void main (String args[]) throw SQLException
  {
Srting tabName =”BOOKLIST”; // table into which to insert
String fileName =”samdoc.xml”; // file containing the xml doc
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
Connection conn =
DriverManager.getConnection(“jdbc:oracle:oci8:scott/tiger@”);
OracleXMLSave sav = new OracleXMLSave(conn,tabName);
URL url = sav.createURL(fileName);
Int rowCount = sav.insertXML(url);
System.out.println(“successfully inserted “+rowCount+
“rows into “+tabName);
conn.close();
  }
}
    像getXML一樣,儲存功能也有一個命令列版本,叫做putXML。它可用於大量載入XML資料。如下的命令將載入一個XML文檔,其中該文檔中包含有與範例DTD相符合的書目列表。
  Java oraclexml putXML ?user “scott/tiger” sampdoc.xml BookList

Updata XML格式資料
    更新操作可應用於表中的多行,這點和插入操作不同。如果匹配列不是表中的關鍵字列,則被更新的XML元素也許會匹配多行。所以更新操作需要一個關鍵字列的列表,其中該公用程式使用該列表來確定要更新的行。下面的書目列表更新例子說明了這種情況:

<ROWSET>
  <ROW num=”1”>
<BOOKID>1234</BOOKID>
<TITLE> The Difference Between God and Larry Ellison: Inside Oracle
       Corporation </TITLE>
<AUTHOR>Mike Wilson</AUTHOR>
<PUBLISHER>William Morrow and Co.</PUBLISHER>
<YEAR>1997</YEAR>
<ISBN>0688149251</ISBN>
  </ROW>
</ROWSET>

該XML更新會執行如下的傳遞BookID列和關鍵字列值的SQL語句:
UPDATE BOOKLIST SET TITLE = ? , AUTHOR = ? WHERE BOOKID = ?
   and bind the values,
   BOOKID - >1234
   TITLE - > The Difference Between God and Larry Ellison: Inside
        Oracle Corporation 
AUTHOR - > Mike Wilson;
   
請注意,不需要更新最初XML文檔中的所有列。如下的範例代碼給出了Java程式是如何完成此功能的:

import oracle.xml.sql.dml.*;
import java.sql.*;
import oracle.jdbc.driver.*;
import oracle.jdbc.*;
public class ListUpdate
{
  public static void main(String argv[]) throws SQLException
  {
String tabName = “BOOKLIST”; // table into which to insert
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn =
  DriverManager.getConnection(“jdbc:oracle:oci8:scott/tiger@”);
OracleXMLSave sav = new OracleXMLSave(conn,tabName);
String [] keyColNames=new string[1];
keyColNames[0]=”BOOKID”;
sav.setKeyColumnNames(keyColNames);
sav.updateXML(argv[0]);
sav.close();
  }
}

Delete XML格式資料
  XML SQL Utility也支援XML文檔的刪除操作。像更新操作一樣,刪除操作也使用關鍵字列來確定被刪除的行。如果沒有給出一個或多個關鍵字列,刪除操作仍將試著匹配文檔中的列。下面是XML文檔和對應的SQL刪除語句:

<ROWSET>
   <ROW num=”1”>
       <BOOKID>1234</BOOKID>
       <TITLE> The Difference Between God and Larry Ellison: Inside Oracle
              Corporation</TITLE>
       <AUTHOR>Mike Wilson</AUTHOR>
       <PUBLISHER>William Morrow and Co. </PUBLISHER>
       <YEAR>1997</YEAR>
       <ISBN>0688149251</ISBN>
</ROW>
</ROWSET>

DELETE FROM BOOKLIST WHRE TITLE = ? AND AUTHOR = ? AND PUBLISHER = ? AND YEAR = ? AND ISBN = ? AND BOOKID = ?
   binding,
   BOOKID < - 1234
   TITLE < -The Difference Between God and Larry Ellison : Inside
        Oracle Corporation
   AUTHOR < - Mike Wilson
   PUBLISHER < - William Morrow & Co.
   YEAR < -1997
   ISBN < - 0688149251

下例顯示了Java如何?刪除操作,其中用BookID作為關鍵字列:

import oracle.xml.sql.dml.*;
import java.sql.*;
import oracle.jdbc.driver.*;
import oracle.jdbc.*;

public class ListDelete
{
  public static void main(String argv[]) throws SQLException
  {
     String tabName = “BOOKLIST” ; // table into which to delete data
     DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
     Connection conn =
        DriverManager.getConnection(jdbc:oracle:oci8:scott/tiger@”);
     OracleXMLSave sav = new OracleXMLSave(conn, tabName);
     String [] keyColNames = new String[1];
     keyColNames[0] = “BookID”;
     sav.setKeyColmnNames(keyColNames);
     sav.deleteXML(argv[0]);
     sav.close();
  }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.