java 读取sql xml文件是否存在_SQLXML

Java XML类型的JavaTM编程语言中的映射。

XML是一种内置类型,它将XML值作为列值存储在数据库表的一行中。

默认情况下,驱动程序将SQLXML对象实现为XML数据的逻辑指针,而不是数据本身。

SQLXML对象在创建它的事务期间有效。

SQLXML接口提供了以String,Reader或Writer或Stream的形式访问XML值的方法。 XML值也可以通过Source访问或设置为Result,它们与XML Parser API(如DOM,SAX和StAX)一起使用,以及XSLT转换和XPath评估。

接口ResultSet,CallableStatement和PreparedStatement中的方法(如getSQLXML)允许程序员访问XML值。 此外,该接口还具有更新XML值的方法。

可以使用BinaryStream获取SQLXML实例的XML值

SQLXML sqlxml = resultSet.getSQLXML(column);

InputStream binaryStream = sqlxml.getBinaryStream();

例如,要使用DOM解析器解析XML值:

DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();

Document result = parser.parse(binaryStream);

或者使用SAX解析器将XML值解析为处理程序:

SAXParser parser = SAXParserFactory.newInstance().newSAXParser();

parser.parse(binaryStream, myHandler);

或者使用StAX解析器解析XML值:

XMLInputFactory factory = XMLInputFactory.newInstance();

XMLStreamReader streamReader = factory.createXMLStreamReader(binaryStream);

因为数据库可以使用XML的优化表示,所以通过getSource()和setResult()访问值可以提高处理性能,而无需序列化为流表示和解析XML。

例如,要获取DOM文档节点:

DOMSource domSource = sqlxml.getSource(DOMSource.class);

Document document = (Document) domSource.getNode();

或者将DOM Document Document的值设置为myNode:

DOMResult domResult = sqlxml.setResult(DOMResult.class);

domResult.setNode(myNode);

或者,将SAX事件发送给您的处理程序:

SAXSource saxSource = sqlxml.getSource(SAXSource.class);

XMLReader xmlReader = saxSource.getXMLReader();

xmlReader.setContentHandler(myHandler);

xmlReader.parse(saxSource.getInputSource());

或者,从SAX事件设置结果值:

SAXResult saxResult = sqlxml.setResult(SAXResult.class);

ContentHandler contentHandler = saxResult.getHandler();

contentHandler.startDocument();

// set the XML elements and attributes into the result

contentHandler.endDocument();

或者,获取StAX事件:

StAXSource staxSource = sqlxml.getSource(StAXSource.class);

XMLStreamReader streamReader = staxSource.getXMLStreamReader();

或者,从StAX事件设置结果值:

StAXResult staxResult = sqlxml.setResult(StAXResult.class);

XMLStreamWriter streamWriter = staxResult.getXMLStreamWriter();

或者,使用xsltFile输出中的XSLT对文件resultFile执行XML值的XSLT转换:

File xsltFile = new File("a.xslt");

File myFile = new File("result.xml");

Transformer xslt = TransformerFactory.newInstance().newTransformer(new StreamSource(xsltFile));

Source source = sqlxml.getSource(null);

Result result = new StreamResult(myFile);

xslt.transform(source, result);

或者,要评估XML值上的XPath表达式:

XPath xpath = XPathFactory.newInstance().newXPath();

DOMSource domSource = sqlxml.getSource(DOMSource.class);

Document document = (Document) domSource.getNode();

String expression = "/foo/@bar";

String barValue = xpath.evaluate(expression, document);

要将XML值设置为XSLT转换的结果:

File sourceFile = new File("source.xml");

Transformer xslt = TransformerFactory.newInstance().newTransformer(new StreamSource(xsltFile));

Source streamSource = new StreamSource(sourceFile);

Result result = sqlxml.setResult(null);

xslt.transform(streamSource, result);

可以使用通过调用newTransformer()指定的标识转换将任何Source转换为Result:

Transformer identity = TransformerFactory.newInstance().newTransformer();

Source source = sqlxml.getSource(null);

File myFile = new File("result.xml");

Result result = new StreamResult(myFile);

identity.transform(source, result);

要将Source的内容写入标准输出:

Transformer identity = TransformerFactory.newInstance().newTransformer();

Source source = sqlxml.getSource(null);

Result result = new StreamResult(System.out);

identity.transform(source, result);

从DOMResult创建DOMSource:

DOMSource domSource = new DOMSource(domResult.getNode());

设置不完整或无效的XML值可能会导致SQLException,或者发生execute()时可能会发生异常。 必须在执行execute()之前关闭所有流,否则将抛出SQLException。

从SQLXML对象读取XML值或从中读取XML值最多只能发生一次。 可读和不可读的概念状态确定其中一个读取API是返回值还是抛出异常。 可写和不可写的概念状态确定其中一个写API是设置值还是抛出异常。

一旦free()或任何读取API被调用,状态就会从可读变为不可读:getBinaryStream(),getCharacterStream(),getSource()和getString()。 发生这种情况时,实现也可能会将状态更改为不可写。

一旦free()或任何编写API被调用,状态就会从可写转移到不可写:setBinaryStream(),setCharacterStream(),setResult()和setString()。 发生这种情况时,实现也可能会将状态更改为不可读。

如果JDBC驱动程序支持数据类型,则必须完全实现SQLXML接口上的所有方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值