王朝网络
分享
 
 
 

Oracle9中XML SQL Utility技术指导(java)

王朝oracle·作者佚名  2008-05-31
宽屏版  字体: |||超大  

■ 开发前要求配置

■ 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();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有