public interface SQLXML
java.sql.SQLXML |
JavaTM编程语言中针对SQL XML类型的映射。 XML是一种内置类型,它将XML值作为列值存储在数据库表的一行中。 默认情况下,驱动程序将SQLXML对象实现为XML数据的逻辑指针,而不是数据本身。 SQLXML对象在创建它的事务期间有效。
SQLXML接口提供了以String,Reader或Writer或Stream的形式访问XML值的方法。 XML值也可以通过Source访问或设置为Result,这些XML值用于DOM,SAX和StAX等XML解析器API,以及XSLT转换和XPath评估。
接口ResultSet,CallableStatement和PreparedStatement中的方法(如getSQLXML)允许程序员访问XML值。 另外,这个接口还有更新XML值的方法。
SQLXML实例的XML值可以使用BinaryStream获取
SQLXML sqlxml = resultSet.getSQLXML(column); InputStream binaryStream = sqlxml.getBinaryStream();For example, to parse an XML value with a DOM parser:
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document result = parser.parse(binaryStream);or to parse an XML value with a SAX parser to your handler:
SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); parser.parse(binaryStream, myHandler);or to parse an XML value with a StAX parser:
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();or to set the value to a DOM Document Node to myNode:
DOMResult domResult = sqlxml.setResult(DOMResult.class); domResult.setNode(myNode);or, to send SAX events to your handler:
SAXSource saxSource = sqlxml.getSource(SAXSource.class); XMLReader xmlReader = saxSource.getXMLReader(); xmlReader.setContentHandler(myHandler); xmlReader.parse(saxSource.getInputSource());or, to set the result value from SAX events:
SAXResult saxResult = sqlxml.setResult(SAXResult.class); ContentHandler contentHandler = saxResult.getXMLReader().getContentHandler(); contentHandler.startDocument(); // set the XML elements and attributes into the result contentHandler.endDocument();or, to obtain StAX events:
StAXSource staxSource = sqlxml.getSource(StAXSource.class); XMLStreamReader streamReader = staxSource.getXMLStreamReader();or, to set the result value from StAX events:
StAXResult staxResult = sqlxml.setResult(StAXResult.class); XMLStreamWriter streamWriter = staxResult.getXMLStreamWriter();or, to perform XSLT transformations on the XML value using the XSLT in xsltFile output to file resultFile:
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);or, to evaluate an XPath expression on the XML value:
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);To set the XML value to be the result of an XSLT transform:
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);Any Source can be transformed to a Result using the identity transform specified by calling newTransformer():
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);To write the contents of a Source to standard output:
Transformer identity = TransformerFactory.newInstance().newTransformer(); Source source = sqlxml.getSource(null); Result result = new StreamResult(System.out); identity.transform(source, result);To create a DOMSource from a DOMResult:
DOMSource domSource = new DOMSource(domResult.getNode());
不完整或无效的XML值可能在设置时导致SQLException,或者在执行execute()时发生异常。 所有流必须在execute()发生之前关闭,否则将引发SQLException。
从一个SQLXML对象读取或写入XML值最多只能发生一次。 可读和不可读的概念状态决定了其中一个读API将返回一个值还是抛出一个异常。 可写和不可写的概念状态决定了其中一个写API将设置值或抛出异常。
getBinaryStream(),getCharacterStream(),getSource()和getString()会调用free()或任何读取API时,状态从可读性变为不可读性。 当发生这种情况时,实现也可能会将状态更改为不可写。
setBinaryStream(),setCharacterStream(),setResult()和setString(),一旦free()或任何写入API被调用,状态就从可写入移动到不可写入状态。 当这种情况发生时,实现也可能会将状态更改为不可读。
如果JDBC驱动程序支持数据类型,则必须完全实现 SQLXML
接口上的所有方法。
Public methods |
|
---|---|
abstract void |
free() 这个方法关闭这个对象并释放它保存的资源。 |
abstract InputStream |
getBinaryStream() 以流的形式检索此SQLXML实例指定的XML值。 |
abstract Reader |
getCharacterStream() 以java.io.Reader对象的形式检索此SQLXML实例指定的XML值。 |
abstract <T extends Source> T |
getSource(Class<T> sourceClass) 返回一个Source,用于读取由此SQLXML实例指定的XML值。 |
abstract String |
getString() 返回由此SQLXML实例指定的XML值的字符串表示形式。 |
abstract OutputStream |
setBinaryStream() 检索可用于编写此SQLXML实例表示的XML值的流。 |
abstract Writer |
setCharacterStream() 检索要用于编写此SQLXML实例表示的XML值的流。 |
abstract <T extends Result> T |
setResult(Class<T> resultClass) 返回设置由此SQLXML实例指定的XML值的Result。 |
abstract void |
setString(String value) 将此SQLXML实例指定的XML值设置为给定的字符串表示形式。 |
void free ()
这个方法关闭这个对象并释放它保存的资源。 当调用这个方法时,SQL XML对象变得无效,既不可读也不可写。 在free
之后,任何尝试调用free
以外的方法free
将导致SQLException
被抛出。 如果free
被多次调用,在后续调用free
被视为无操作。
Throws | |
---|---|
SQLException |
if there is an error freeing the XML value. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |
InputStream getBinaryStream ()
以流的形式检索此SQLXML实例指定的XML值。 输入流的字节根据XML 1.0规范的附录F进行解释。 当ResultSet的指定列具有SQLXML的java.sql.Types类型时,此方法的行为与ResultSet.getBinaryStream()相同。
调用此方法时,SQL XML对象变得不可读,并且根据实现情况也可能变得不可写。
Returns | |
---|---|
InputStream |
a stream containing the XML data. |
Throws | |
---|---|
SQLException |
if there is an error processing the XML value. An exception is thrown if the state is not readable. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |
Reader getCharacterStream ()
以java.io.Reader对象的形式检索此SQLXML实例指定的XML值。 此流的格式由org.xml.sax.InputSource定义,其中流中的字符表示根据XML 1.0规范的第2部分和附录B的XML的Unicode码点。 虽然可能存在unicode以外的编码声明,但流的编码是unicode。 当ResultSet的指定列具有SQLXML类型java.sql.Types时,此方法的行为与ResultSet.getCharacterStream()相同。
调用此方法时,SQL XML对象变得不可读,并且根据实现情况也可能变得不可写。
Returns | |
---|---|
Reader |
a stream containing the XML data. |
Throws | |
---|---|
SQLException |
if there is an error processing the XML value. The getCause() method of the exception may provide a more detailed exception, for example, if the stream does not contain valid characters. An exception is thrown if the state is not readable. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |
T getSource (Class<T> sourceClass)
返回一个Source,用于读取由此SQLXML实例指定的XML值。 源被用作XML解析器和XSLT转换器的输入。
默认情况下,XML解析器的源将具有命名空间处理。 源的systemID与实现相关。
调用此方法时,SQL XML对象变得不可读,并且根据实现情况也可能变得不可写。
请注意,SAX是一种回调体系结构,因此应该使用内容处理程序来设置返回的SAXSource,该处理程序将从解析中接收SAX事件。 内容处理程序将根据XML的内容接收回调。
SAXSource saxSource = sqlxml.getSource(SAXSource.class); XMLReader xmlReader = saxSource.getXMLReader(); xmlReader.setContentHandler(myHandler); xmlReader.parse(saxSource.getInputSource());
Parameters | |
---|---|
sourceClass |
Class : The class of the source, or null. If the class is null, a vendor specifc Source implementation will be returned. The following classes are supported at a minimum: javax.xml.transform.dom.DOMSource - returns a DOMSource javax.xml.transform.sax.SAXSource - returns a SAXSource javax.xml.transform.stax.StAXSource - returns a StAXSource javax.xml.transform.stream.StreamSource - returns a StreamSource |
Returns | |
---|---|
T |
a Source for reading the XML value. |
Throws | |
---|---|
SQLException |
if there is an error processing the XML value or if this feature is not supported. The getCause() method of the exception may provide a more detailed exception, for example, if an XML parser exception occurs. An exception is thrown if the state is not readable. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |
String getString ()
返回由此SQLXML实例指定的XML值的字符串表示形式。 此String的格式由org.xml.sax.InputSource定义,其中流中的字符表示根据XML 1.0规范的第2节和附录B的XML的unicode代码点。 尽管unicode以外的编码声明可能存在,但String的编码是unicode。 当ResultSet的指定列具有SQLXML类型java.sql.Types时,此方法的行为与ResultSet.getString()相同。
调用此方法时,SQL XML对象变得不可读,并且根据实现情况也可能变得不可写。
Returns | |
---|---|
String |
a string representation of the XML value designated by this SQLXML instance. |
Throws | |
---|---|
SQLException |
if there is an error processing the XML value. The getCause() method of the exception may provide a more detailed exception, for example, if the stream does not contain valid characters. An exception is thrown if the state is not readable. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |
OutputStream setBinaryStream ()
检索可用于编写此SQLXML实例表示的XML值的流。 流开始于位置0.流的字节根据XML 1.0规范的附录F进行解释当ResultSet的指定列具有java.sql类型时,此方法的行为与ResultSet.updateBinaryStream()相同.SQLXML的类型。
当调用此方法时,SQL XML对象不可写,并且根据实现情况也可能变得不可读。
Returns | |
---|---|
OutputStream |
a stream to which data can be written. |
Throws | |
---|---|
SQLException |
if there is an error processing the XML value. An exception is thrown if the state is not writable. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |
Writer setCharacterStream ()
检索要用于编写此SQLXML实例表示的XML值的流。 此流的格式由org.xml.sax.InputSource定义,其中流中的字符表示根据XML 1.0规范的第2部分和附录B的XML的Unicode码点。 虽然可能存在unicode以外的编码声明,但流的编码是unicode。 当ResultSet的指定列具有SQLXML类型java.sql.Types时,此方法的行为与ResultSet.updateCharacterStream()相同。
当调用此方法时,SQL XML对象不可写,并且根据实现情况也可能变得不可读。
Returns | |
---|---|
Writer |
a stream to which data can be written. |
Throws | |
---|---|
SQLException |
if there is an error processing the XML value. The getCause() method of the exception may provide a more detailed exception, for example, if the stream does not contain valid characters. An exception is thrown if the state is not writable. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |
T setResult (Class<T> resultClass)
返回设置由此SQLXML实例指定的XML值的Result。
结果的systemID与实施相关。
当调用此方法时,SQL XML对象不可写,并且根据实现情况也可能变得不可读。
请注意,SAX是回调体系结构,并且返回的SAXResult具有指定的内容处理程序,它将根据XML的内容接收SAX事件。 使用XML文档的内容调用内容处理程序以分配值。
SAXResult saxResult = sqlxml.setResult(SAXResult.class); ContentHandler contentHandler = saxResult.getXMLReader().getContentHandler(); contentHandler.startDocument(); // set the XML elements and attributes into the result contentHandler.endDocument();
Parameters | |
---|---|
resultClass |
Class : The class of the result, or null. If resultClass is null, a vendor specific Result implementation will be returned. The following classes are supported at a minimum: javax.xml.transform.dom.DOMResult - returns a DOMResult javax.xml.transform.sax.SAXResult - returns a SAXResult javax.xml.transform.stax.StAXResult - returns a StAXResult javax.xml.transform.stream.StreamResult - returns a StreamResult |
Returns | |
---|---|
T |
Returns a Result for setting the XML value. |
Throws | |
---|---|
SQLException |
if there is an error processing the XML value or if this feature is not supported. The getCause() method of the exception may provide a more detailed exception, for example, if an XML parser exception occurs. An exception is thrown if the state is not writable. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |
void setString (String value)
将此SQLXML实例指定的XML值设置为给定的字符串表示形式。 此String的格式由org.xml.sax.InputSource定义,其中流中的字符表示根据XML 1.0规范的第2节和附录B的XML的unicode代码点。 尽管unicode以外的编码声明可能存在,但String的编码是unicode。 当ResultSet的指定列具有SQLXML类型java.sql.Types时,此方法的行为与ResultSet.updateString()相同。
当调用此方法时,SQL XML对象不可写,并且根据实现情况也可能变得不可读。
Parameters | |
---|---|
value |
String : the XML value |
Throws | |
---|---|
SQLException |
if there is an error processing the XML value. The getCause() method of the exception may provide a more detailed exception, for example, if the stream does not contain valid characters. An exception is thrown if the state is not writable. |
SQLFeatureNotSupportedException |
if the JDBC driver does not support this method |