JDBC 4.0 SQLXML Interface
The SQLXML interface provides methods for accessing the XML data in a datasource 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.
The revised interface includes the following methods:
- free - closes the object and releases the resources that it held
- getBinaryStream - Retrieves the XML value designated by this SQLXML instance as a stream
- getCharacterStream - Retrieves the XML value designated by this SQLXML instance as a java.io.Reader object
- getSource - Returns a Source for reading the XML value designated by this SQLXML instance
- getString - Returns a string representation of the XML value designated by this SQLXML instance
- setBinaryStream - Retrieves a stream that can be used to write the XML value that this SQLXML instance represents
- setCharacterStream - Retrieves a stream to be used to write the XML value that this SQLXML instance represents
- setResult - Returns a Result for setting the XML value designated by this SQLXML instance
- setString - Sets the XML value designated by this SQLXML instance to the given String representation
I have included some of the sample code we provided in the SQLXML javadoc:
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();To set the value to a DOM Document Node to myNode:
DOMResult domResult = sqlxml.setResult(DOMResult.class); domResult.setNode(myNode);To send SAX events to your handler:
SAXSource saxSource = sqlxml.getSource(SAXSource.class); XMLReader xmlReader = saxSource.getXMLReader(); xmlReader.setContentHandler(myHandler); xmlReader.parse(saxSource.getInputSource());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();To obtain StAX events:
StAXSource staxSource = sqlxml.getSource(StAXSource.class); XMLStreamReader streamReader = staxSource.getXMLStreamReader();To set the result value from StAX events:
StAXResult staxResult = sqlxml.getResult(StAXResult.class); XMLStreamWriter streamWriter = staxResult.getXMLStreamWriter();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);
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());
- Login or register to post comments
- Printer-friendly version
- lancea's blog
- 1198 reads





