《《XML与数据库》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《XML与数据库》PPT课件.ppt(36页珍藏版)》请在金锄头文库上搜索。
1、第第7章章 XML与数据库与数据库 n n7.1 数据存储n n7.2 XML与数据库的转换n n7.3 SQL Server 对 XML的支持n n7.4 Oracle对 XML的支持7.1 数据存储数据存储 数据存储: a.结构化的文本文件 b.XML文件 c.关系数据库 d.某种专用的二进制格式。如何使用关系数据库和如何使用关系数据库和XML文档来储存信文档来储存信息息?如何将这二者结合起来如何将这二者结合起来?提供一种可靠的、易于存储的数据存储。提供一种可靠的、易于存储的数据存储。 数据库和XML有很多共同之处.数据库和数据库和XML 存储数据存储数据 n n数据库:关系数据库是以记录
2、和字段来存储数据的,字段与记录之间的顺序和关系并不重要。n nXML:以文件形式存储,方式类似数据库,但是重要的各个元素之间的顺序和相互关系(父子)。nameagesexC+javaxmlS120male908085S219male908085 S1 20.XML和数据库和数据库n nXML和数据库都可用于保存数据,XML与数据库的区别与联系如下:1. XML侧重于数据交换,数据库更侧重于数据存储2.XML易于布置,基本不需要额外的管理软件,文档较小;而不像数据库需要配置,附加的管理系统较庞大3.在要求不高的环境下可以把XML当作数据库来使用;但在大多数情况下,XML就不能胜任。 因此出现了因
3、此出现了XML数据库数据库.7.1.1 关系数据库中信息的存储与查询数据库:层次数据库:层次网状网状关系关系面向对象面向对象关系数据库:表关系数据库:表 属性列(字段)属性列(字段)行(元组)行(元组) 记录记录音乐编号音乐编号音乐名音乐名演唱者演唱者价格价格说明说明CD-001CD-001十年十年陈奕迅陈奕迅¥15.0015.00时间:时间:6161分钟分钟CD-002CD-002丁香花丁香花唐磊唐磊¥12.5012.50时间:时间:5555分钟分钟CD-003CD-003恋人未满恋人未满SHESHE¥13.0013.00时间:时间:7070分钟分钟SQL(结构化查询语言结构化查询语言)SQ
4、L SQL 能做什么?能做什么?能做什么?能做什么?n nSQL SQL 面向数据库执行查询面向数据库执行查询n nSQL SQL 可从数据库取回数据可从数据库取回数据n nSQL SQL 可在数据库中插入新的纪录可在数据库中插入新的纪录n nSQL SQL 可更新数据库中的数据可更新数据库中的数据n nSQL SQL 可从数据库删除记录可从数据库删除记录n nSQL SQL 可创建新数据库可创建新数据库n nSQL SQL 可在数据库中创建新表可在数据库中创建新表n nSQL SQL 可在数据库中创建存储过程可在数据库中创建存储过程n nSQL SQL 可在数据库中创建视图可在数据库中创建视
5、图n nSQL SQL 可以设置表、存储过程和视图的权限可以设置表、存储过程和视图的权限SQL结构化查询语言结构化查询语言n n数据查询、数据定义和数据控制。1、查询 SELECT 音乐名,演唱者,价格,说明 FORM musics WHERE 音乐编号=“CD-002”2、插入和更新、插入和更新n n插入: INSERT INTO (,) VALUES (,)例:INSERT INTO musics VALUES(CD-004,美丽新世界,SHE,¥12.50,时间:3分钟)n n 修改: UPDATE SET=,= WHERE 例:UPDATE musics SET 价格=价格+1 WHE
6、RE 音乐编号=“CD-002”在网站中使用在网站中使用 SQL要创建发布数据库中数据的网站,需要以下要素:n nRDBMS 数据库程序(比如 MS Access, SQL Server, MySQL)n n服务器端脚本语言(比如 PHP 或 ASP)n nSQLn nHTML / CSS7.1.2 XML数据中信息的存储与查询数据中信息的存储与查询1.数据的查询 XML文档的查询和选择必须使用DOM和XPath来进行。 例:Example:Query.cs(C#) Using System; Using System.Xml; class Class1 static void main(st
7、ring args)n n创建XmlDocument对象,并载入XML文档 XmlDocument xdoc=new XmlDocument( ); xdoc.load(”E:lpfxml bookmusic.xml”) XmlElement xde=xdoc.DocumentElement;n n利用XPath选取满足条件的节点 XmlNode xe=xde.SelectSingleNode(“child:音乐child:演唱者text( )=陈奕迅”); if(xe!=null) /若节点存在,则输出其子节点及属性的信息。 .2.更新和插入 使用DOM方法,也可以很方便地实现更新和插入操作
8、 。例: Using System; Using System.Xml; namespace XmlAdd class Class1 static void main(string args)n n创建XmlDocument对象,并载入XML文档 XmlDocument xdoc=new XmlDocument( ); xdoc.load(”E:lpfxml bookmusic.xml”)n n获取文档的根元素 XmlElement xde=xdoc.DocumentElement;n n创建“音乐”元素,并将其添加到根元素下的子元素列表的末尾 XmlElement xe=xdoc.Creat
9、Element(“音乐”); xe.SetAttribute(“音乐编号”,“CD-004”); xde.AppendChild(xe);n n将“音乐名”、“演唱者”、“价格”和“说明”四个元素添加为“音乐”元素的子元素 XmlElement xe_ch1=xdoc.CreatElement(“音乐名”); xe_ch1.InnerText=“美丽新世界”; xe.AppendChild(xe_ch1); 7.2 XML与数据库的转换与数据库的转换 现在的很多技术都支持XML与数据库的连接,如ASP ,DOM,SOAP,XML-RPC等,下面就来看看利用ASP.NET和DOM来实现数据库与X
10、ML的信息交换,即如何把数据库中的信息提取出来生成所需的XML文档,以及怎样把一些重要的信息写入到数据库中。7.2.1数据库到数据库到XML文档的信息传送文档的信息传送n n导入所需的名称空间 Using System; Using System.Data; Using System.Data.SqlClient; Using System.Xml; namespace DBtoXml class Class1 static void main(string args) 创建到数据库的连接,并读取数创建到数据库的连接,并读取数据据SqlConnectionSqlConnection conBo
11、okconBook=new =new SqlConnection(SqlConnection(“ “serverserver= =localhost;databaselocalhost;database= =bookorbookorder;UIDder;UID= =sa;PWDsa;PWD=131=131” ”); );/连接对象。连接对象。SqlDataAdapterSqlDataAdapter dadbookdadbook=new =new SqlDataAdapter(SqlDataAdapter(“ “SelectSelect * form * form booksbooks” ”,c
12、onBook,conBook); );/Adapter是数据适配器,当实例化时(创建对象时,传递一条sql语句)DataSet dstBook=new DataSet();/建立一个数据集,把数据库中的数据放到数据集DataSet中。dadBook.Fill(dstBook,“Books”);/用Fill方法来填充数据集。DataTable dtblBook=dstBook.Tables“Books”;/ DataSet类似数据库的内存对象,可以添加多张表,相当于客户端临时数据库。创建并添加创建并添加XML文档的声明文档的声明n n?xml version=?n nXmldeclaration
13、Xmldeclaration xdeclxdecl=xdoc.createxmldeclaration(=xdoc.createxmldeclaration(“ “1.01.0” ”, ,” ”utf-8utf-8” ”, ,” ”yesyes” ”); );Xdoc.Appendchild(xdeclXdoc.Appendchild(xdecl); );创建并添加文档的根元素创建并添加文档的根元素booksXmlelementXmlelement xexe-book=-book=xdoc.CreateElement(xdoc.CreateElement(“ “booksbooks” ”);
14、);xdoc.AppendChild(xe_booksxdoc.AppendChild(xe_books); );n n读取数据库中的每一行信息并加入到读取数据库中的每一行信息并加入到XMLXML中中 for(intfor(int i=0; i i=0; idtblbook.rows.countdtblbook.rows.count; i+); i+)n n添加添加bookbook的子元素的子元素bookIDbookIDXmlelementXmlelement xe-xe-bookIDbookID= =xdoc.CreateElement(xdoc.CreateElement(“ “bookI
15、DbookID” ”); );xe-bookID.InnerTextxe-bookID.InnerText= =dtblBook.rowsidtblBook.rowsi“ “bookIDbookID” ”.TOString.TOString();();xe_book.AppendChild(xe_bookIDxe_book.AppendChild(xe_bookID); );7.2.2 XML文档到数据库的信息传送文档到数据库的信息传送导入所需的名称空间 Using System; Using System.Xml; Using System.Data; Using System.Data.S
16、qlClient; namespace XmltoDB class Class1 static void main(string args)设置到数据库的连接,设置到数据库的连接,SqlConnectionSqlConnection conBookOrderconBookOrder=new =new SqlConnection(SqlConnection(“ “serverserver= =localhost;databaselocalhost;database= =bookOrdebookOrder;UIDr;UID= =sa;PWDsa;PWD=131=131” ”); );DataSet
17、DataSet dstBookdstBook=new =new DataSetDataSet();();SqlDataAdapterSqlDataAdapter dadCustomerdadCustomer=new =new SqlDataAdapter(SqlDataAdapter(“ “SelectSelect * * form form CustomersCustomers” ”,conBookOrder,conBookOrder); );dadCustomer.Fill(dstBookOrder,dadCustomer.Fill(dstBookOrder,“ “CustomersCus
18、tomers” ”); );DataTableDataTable dtblCustomerdtblCustomer= =dstBookOrder.TablesdstBookOrder.Tables“ “CustomersCustomers” ”; ;创建创建Xmldocument对象,并载入对象,并载入XML文档文档XMLDocumentXMLDocument xdocxdoc=new =new XMLDocumentXMLDocument();();xdoc.load(xdoc.load(“ “e:programmingvcsorder.xmle:programmingvcsorder.xm
19、l” ”); );XmlelementXmlelement xe_ordersxe_orders= =xdoc.documentElementxdoc.documentElement; ;n n提取文档中各节点的信息,并插入到数据库中提取文档中各节点的信息,并插入到数据库中for(intfor(int i=0;i i=0;ixe_order.childNodes.count;ixe_order.childNodes.count;i+)+)orderorder节点:节点:xmlNodexmlNode xn_orderxn_order= =xe_orders.childnodesixe_order
20、s.childnodesi; ;orderIDorderID节点:节点:string string strorderIDstrorderID=xe_orders.childnodes0.InnerText;=xe_orders.childnodes0.InnerText;n nXMLDocument:返回对XML文档对象模式的引用。n ndocumentElement:返回XML文档的根节点。n nchildNodes:返回节点的子节点目录。n nitem:通过索引访问目录中的个别节点。索引值是从0开始的,所以item(0)返回第一个节点。n ntext:返回节点的内容。n nusing 你的
21、名字空间 ; (A) 还应该在behind code加入该控件的声明 (B) n n相关知识: http:/ SQL Server 对对XML 的支持的支持 SQL Server2000 SQL Server2000中的中的XMLXML支持包括:支持包括:使用使用SELECTSELECT语句中的语句中的FOR XMLFOR XML子句检索子句检索XMLXML数据数据简单的简单的HTTP URLHTTP URL请求请求UpdategramUpdategramXML XML BulkloadBulkloadOPENXMLOPENXML 注意,如果只是安装了基本的注意,如果只是安装了基本的SQL S
22、erver2000SQL Server2000,这,这些技术还是不可用的,需要安装些技术还是不可用的,需要安装XML for SQL XML for SQL Server2000 Web Release1Server2000 Web Release1,该软件可从微软网站上免,该软件可从微软网站上免费下载。另外,这里的很多技术还需要费下载。另外,这里的很多技术还需要IIS5.0IIS5.0或更高版或更高版本的支持方可工作。本的支持方可工作。7.3.1. 7.3.1. 从从SQL ServerSQL Server数据库中提取数据库中提取XMLXML数据数据 1 1、FOR XMLFOR XML 从
23、从SQL ServerSQL Server数据库中提取数据库中提取XMLXML数据的最基本方式是数据的最基本方式是在在SQL SQL 查询中使用查询中使用FOR XMLFOR XML子句子句, ,告知告知SQL ServerSQL Server提供提供一份一份XMLXML文档来作为响应。文档来作为响应。 FOR XMLFOR XML子句的基本语法如下:子句的基本语法如下: FOR XML mode , XMLDATA , ELEMENTS , FOR XML mode , XMLDATA , ELEMENTS , BINARY BASE64BINARY BASE64 其中mode是使用该子句时
24、需指明的下述三种模式之一: RAW 提供一份简单的几乎没有格式化的XML结果 AUTO提供一份具有更多格式 选项的XML结果 EXPLICIT允许 对所返回的XML结果进行显示的格式化 XMLDATA和ELEMENTS2. 简单的HTTP URL请求 SQL Server2000的另一项功能是能够通过http执行查询,所需的工作仅仅是将它们标记到URL的尾部。也可以以类似的方式提供XPath查询。但是在产品级的应用程序中并不提倡这样做,因为该语法允许执行任意的查询,这样如果该数据库暴露在Internet上,将会引发潜在的安全隐患。不过,在设计期间用它来进行测试还是很有用的。 1、实现过程:ht
25、tp:/localhost/northwind?Sql=SELECT+*+FROM+Categories+WHERE+CategoryID=1+FOR+XML+AUTO2、模板3、为模板指定参数7.3.2. XML7.3.2. XML数据插入到数据库数据插入到数据库 1 1、 OPENXMLOPENXML OPENXML OPENXML的基本语法如下所示:的基本语法如下所示:OPENXML OPENXML (iDociDoc intint in in,RowPatternRowPattern nVarcharnVarchar in in,Flags byte in Flags byte in
26、) WITH WITH (rowsetschemarowsetschema colpatternscolpatterns | | tablenametablename ) iDociDoc参数指定表示参数指定表示XMLXML文档的内部节点树,该参数包含文档的内部节点树,该参数包含由由sp_xml_preparedocumentsp_xml_preparedocument存储过程所返回的值。存储过程所返回的值。 RowPatternRowPattern参数用来定义将要返回的参数用来定义将要返回的XMLXML文档中的文档中的元素,指定元素,指定OPENXMLOPENXML将要处理的将要处理的iDo
27、ciDoc文档的节点。节文档的节点。节点是通过点是通过XPathXPath表达式来指定的。表达式来指定的。 FlagFlag参数告诉参数告诉SQL ServerSQL Server搜索属性和搜索属性和( (或或) )子元素。该子元素。该值可以是值可以是0 0(默认值,表示属性(默认值,表示属性) )、1(1(属性属性) )或或2(2(元素元素) )。要同时搜索属性和元素,您需要组合这些值来生成要同时搜索属性和元素,您需要组合这些值来生成3 3。 WITH子句允许指定希望出现在结果集中的列、它们的数据类型及将源XML的哪个节点映射到该列。WITH子句有三个选项:1)WITH TableName将
28、结果集关联到一个已有的数据表。2) WITH (Name varchar(20),Root/Name)指定列、数据类型及用于告知处理器源XML节点映射位置的XPath表达式(可选)。3)全部忽略掉该子句。 XML BulkLoad技术可以用于将大量的XML数据填充到数据库的数据表中。 为此,需要使用SQLXMLBulkLoad对象。可以通过VBScript之类的脚本语言来创建该对象: Set Set BulkLoadObjBulkLoadObj = = CreateObject(CreateObject(“ “SQLXMLBulkLoadSQLXMLBulkLoad. . SQLXMLBulk
29、LoadSQLXMLBulkLoad” ”) )一旦有了该对象,还要为它提供:n n连接细节,以保证它能够访问待填充的数据库。n n包含待上载数据的XML。n n用于说明XML数据和数据库间映射细节的注释schema文件。 2、 XML BulkLoad7.4 Oracle对对XML 的支持的支持 Oracle Oracle公司在其最新公司在其最新Oracle 8iOracle 8i数据库产品中提供数据库产品中提供了对了对XMLXML的支持,使其成为开发基于的支持,使其成为开发基于XMLXML的的InternetInternet应用的系统平台。作为应用的系统平台。作为Oracle 8iOrac
30、le 8i数据库的一个主要数据库的一个主要组成部分,组成部分,JavaJava版本的版本的XMLSQLXMLSQL实用工具在实用工具在OracleOracle公公司的司的XMLXML战略计划中扮演着重要角色。该工具包包战略计划中扮演着重要角色。该工具包包含了一组含了一组JavaJava类,可完成下述两大功能:类,可完成下述两大功能: 一、一、 向数据库发送查询语句,然后从返回的结果向数据库发送查询语句,然后从返回的结果中输出中输出XMLXML文档文档( (文本或文本或DOMDOM节点树节点树) )。 二、将二、将XMLXML数据保存至数据库。数据保存至数据库。 这两大功能可以说是这两大功能可以
31、说是SQLSQL数据库支持数据库支持XMLXML的最基本的最基本要求,却足以体现当今要求,却足以体现当今XMLXML技术发展的潮流。技术发展的潮流。Oracle Java版本的XMlSQL实用工具具有下列特性:能够从SQL查询中产生XML文档能够从SQL查询语句或JDBC ResultSet对象中输出文本或文档对象模型节点树(DOM)。能够将XML文档数据写入数据库表或视图中支持w3C的XMLl.0推荐标准。可以通过扩展进而支持Sax1.0文档访问。支持基于下列字符集的文档: UTF- 8UTF- 8、UTF-16UTF-16、ISO-10646ISO-10646UCS- 2UCS- 2、ISO-ISO-1064610646UCS- 4UCS- 4、EUC-KREUC-KR、USUSASCIIASCII、EBC-DIC-CP-EBC-DIC-CP-* *、ISOISO8859-1to-98859-1to-9、BIGBIG、GB2312GB2312、EUC-J PEUC-J P、KOI8KOI8R R、ISOISO20222022JPJP、ISOISO20222022KRKR、Shift- Shift- JISJIS