public interface SQLXML
The SQLXML interface provides methods for accessing the XML value as a String, a Reader or Writer, or as a Stream. The XML value may also be accessed through a Source or set as a Result, which are used with XML Parser APIs such as DOM, SAX, and StAX, as well as with XSLT transforms and XPath evaluations.
Methods in the interfaces ResultSet, CallableStatement, and PreparedStatement, such as getSQLXML allow a programmer to access an XML value. In addition, this interface has methods for updating an XML value.
The XML value of the SQLXML instance may be obtained as a BinaryStream using
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);
Because databases may use an optimized representation for the XML, accessing the value through getSource() and setResult() can lead to improved processing performance without serializing to a stream representation and parsing the XML.
For example, to obtain a DOM Document Node:
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.getHandler(); 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());
Incomplete or invalid XML values may cause an SQLException when set or the exception may occur when execute() occurs. All streams must be closed before execute() occurs or an SQLException will be thrown.
Reading and writing XML values to or from an SQLXML object can happen at most once. The conceptual states of readable and not readable determine if one of the reading APIs will return a value or throw an exception. The conceptual states of writable and not writable determine if one of the writing APIs will set a value or throw an exception.
The state moves from readable to not readable once free() or any of the reading APIs are called: getBinaryStream(), getCharacterStream(), getSource(), and getString(). Implementations may also change the state to not writable when this occurs.
The state moves from writable to not writeable once free() or any of the writing APIs are called: setBinaryStream(), setCharacterStream(), setResult(), and setString(). Implementations may also change the state to not readable when this occurs.
All methods on the SQLXML
interface must be fully implemented if the
JDBC driver supports the data type.
javax.xml.parsers
,
javax.xml.stream
,
javax.xml.transform
,
javax.xml.xpath
Modifier and Type | Method and Description |
---|---|
void |
free()
This method closes this object and releases the resources that it held.
|
InputStream |
getBinaryStream()
Retrieves the XML value designated by this SQLXML instance as a stream.
|
Reader |
getCharacterStream()
Retrieves the XML value designated by this SQLXML instance as a java.io.Reader object.
|
<T extends Source> |
getSource(Class<T> sourceClass)
Returns a Source for reading the XML value designated by this SQLXML instance.
|
String |
getString()
Returns a string representation of the XML value designated by this SQLXML instance.
|
OutputStream |
setBinaryStream()
Retrieves a stream that can be used to write the XML value that this SQLXML instance represents.
|
Writer |
setCharacterStream()
Retrieves a stream to be used to write the XML value that this SQLXML instance represents.
|
<T extends Result> |
setResult(Class<T> resultClass)
Returns a Result for setting the XML value designated by this SQLXML instance.
|
void |
setString(String value)
Sets the XML value designated by this SQLXML instance to the given String representation.
|
void free() throws SQLException
free
has been called, any attempt to invoke a
method other than free
will result in a SQLException
being thrown. If free
is called multiple times, the subsequent
calls to free
are treated as a no-op.SQLException
- if there is an error freeing the XML value.SQLFeatureNotSupportedException
- if the JDBC driver does not support
this methodInputStream getBinaryStream() throws SQLException
The SQL XML object becomes not readable when this method is called and may also become not writable depending on implementation.
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 methodOutputStream setBinaryStream() throws SQLException
The SQL XML object becomes not writeable when this method is called and may also become not readable depending on implementation.
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 methodReader getCharacterStream() throws SQLException
The SQL XML object becomes not readable when this method is called and may also become not writable depending on implementation.
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 methodWriter setCharacterStream() throws SQLException
The SQL XML object becomes not writeable when this method is called and may also become not readable depending on implementation.
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 methodString getString() throws SQLException
The SQL XML object becomes not readable when this method is called and may also become not writable depending on implementation.
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 methodvoid setString(String value) throws SQLException
The SQL XML object becomes not writeable when this method is called and may also become not readable depending on implementation.
value
- the XML valueSQLException
- 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 extends Source> T getSource(Class<T> sourceClass) throws SQLException
Sources for XML parsers will have namespace processing on by default. The systemID of the Source is implementation dependent.
The SQL XML object becomes not readable when this method is called and may also become not writable depending on implementation.
Note that SAX is a callback architecture, so a returned SAXSource should then be set with a content handler that will receive the SAX events from parsing. The content handler will receive callbacks based on the contents of the XML.
SAXSource saxSource = sqlxml.getSource(SAXSource.class); XMLReader xmlReader = saxSource.getXMLReader(); xmlReader.setContentHandler(myHandler); xmlReader.parse(saxSource.getInputSource());
T
- the type of the class modeled by this Class objectsourceClass
- The class of the source, or null.
If the class is null, a vendor specific 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
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<T extends Result> T setResult(Class<T> resultClass) throws SQLException
The systemID of the Result is implementation dependent.
The SQL XML object becomes not writeable when this method is called and may also become not readable depending on implementation.
Note that SAX is a callback architecture and the returned SAXResult has a content handler assigned that will receive the SAX events based on the contents of the XML. Call the content handler with the contents of the XML document to assign the values.
SAXResult saxResult = sqlxml.setResult(SAXResult.class); ContentHandler contentHandler = saxResult.getXMLReader().getContentHandler(); contentHandler.startDocument(); // set the XML elements and attributes into the result contentHandler.endDocument();
T
- the type of the class modeled by this Class objectresultClass
- 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
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 Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2019, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.