■ 开发前要求配置 ■ 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 :
“+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(); } }
|