快速业务通道

使用JDBC4.0操作XML类型数据 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
使用和SQL/XML完全兼容的JDBC驱动来完成这些任务。事实上,我们可以完全使用java.sql.SQLXML来实现这个例子,这样做虽然会编译通过,但程序运行的结果会抛出一个Derby-specific异常,如"Binding directly to an XML value is not allowed."。总之,本例的代码只是为了演示程序如何也SQL/XML兼容性数据库交互。下面我将分别讲解一下重要的代码片段。

在上面的例子代码中,首先建立一个简单的数据表,这个数据表包含一个XML类型的数据字段DATA,代码如下:

Statement s = c.createStatement(); s.execute("CREATE TABLE ARTICLE(ID INTEGER, DATA XML)");

接下来向数据表中插入数据。由于目前Derby还不支持java.sql.SQLXML类型的数据,当我们在DATA插入数据时,必须将XML数据绑字到其它可以析XML数据的类型上。在这里我们使用CLOB类型,代码如下:

ps = c.prepareStatement("INSERT INTO ARTICLE (ID, DATA) VALUES "+   "(?, XMLPARSE (DOCUMENT CAST (? AS CLOB) PRESERVE "+   "WHITESPACE))"); ps.setInt(1, id++); ps.setClob(2, new StringReader(insert));

现在,如果我们有一个和JDBC4完全兼容的驱动,也可以使用java.io.Writer来做同样的事,代码如下:

ps = c.prepareStatement("INSERT INTO ARTICLE (ID, DATA) values (?, ?)"); SQLXML article = c.createSQLXML(); Writer writer = article.setCharacterStream(); writer.write(insert); writer.close(); ps.setInt(1, id++); ps.setSQLXML(2, article);

或使用javax.xml.transform.dom.DOMSource来完成这项工作:

ps = c.prepareStatement("INSERT INTO ARTICLE (ID, DATA) values (?, ?)"); SQLXML article = c.createSQLXML(); DOMResult dom = (DOMResult)article.setResult(DOMResult.class); dom.setNode(doc); // doc is instance of org.w3c.dom.Document ps.setInt(1, id++); ps.setSQLXML(2, article);

接下来我们来从数据库中获得XML数据。和插入数据类似,当我们从Derby中获得XML数据时,必须将XML数据类型转换成字符类型,代码如下:

ResultSet rs = s.executeQuery("SELECT XMLSERIALIZE (DATA AS CLOB) "+

"FROM ARTICLE WHERE ID = 2");

如果使用支持java.sql.SQLXML的驱动,我们可以通过直接使用XML数据库类型来完成类似的工作。也就是说我们可以直接得到XML数据。下面的代码假设我们使用DOM分析XML,并获得记录集:

PreparedStatement st = c.prepareStatement("SELECT ID, DATA FROM ARTICLE"); ResultSet rs = st.executeQuery(); while (rs.next()) { SQLXML article = rs.getSQLXML("DATA"); InputStream stream = article.getBinaryStream(); DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = parser.parse(stream); // Do something... }

使用JDBC4.0操作XML类型数据(4)

时间:2011-03-14 IT168 极地圣火

在这种情况下无需使用getBinaryStream()方法,而取而代之的是getSource(Class sourceClass)方法,这个方法可以得到DOMSource、SAXSource或任何其他实现javax.xml.transform.Source的类实例。

下面我们来使用XPath来过滤XML数据。在这个例子的最后演示了如何在新版的SQL2003中使用XPath语句:XMLEXISTS来过滤数据。代码如下:

Statement s = c.createStatement();ResultSet rs = s.executeQuery("SELECT ID FROM ARTICLE WHERE "+ "XMLEXISTS(''//author[text()=\"John Smith\"]'' PASSING BY REF "+ "DATA)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号