Most visited

Recently visited

Added in API level 9

SQLXML

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接口上的所有方法。

也可以看看:

Summary

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值设置为给定的字符串表示形式。

Public methods

free

Added in API level 9
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

getBinaryStream

Added in API level 9
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

getCharacterStream

Added in API level 9
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

getSource

Added in API level 9
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

getString

Added in API level 9
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

setBinaryStream

Added in API level 9
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

setCharacterStream

Added in API level 9
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

setResult

Added in API level 9
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

setString

Added in API level 9
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

Hooray!