Интерфейс SQLXML
public interface SQLXML
Интерфейс SQLXML предоставляет методы для доступа к значению XML в виде String, Reader или Writer, а также в виде Stream. К значению XML также можно получить доступ через Source или задать его как Result. Эти типы используются с API XML-парсеров, таких как DOM, SAX и StAX, а также с преобразованиями XSLT и вычислениями XPath.
Методы интерфейсов ResultSet, CallableStatement и PreparedStatement, например getSQLXML, позволяют программисту получить доступ к значению XML. Кроме того, этот интерфейс содержит методы для обновления значения XML.
Значение XML экземпляра SQLXML можно получить как BinaryStream с помощью
SQLXML sqlxml = resultSet.getSQLXML(column); InputStream binaryStream = sqlxml.getBinaryStream();Например, чтобы разобрать значение XML с помощью парсера DOM:
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document result = parser.parse(binaryStream);или разобрать значение XML с помощью парсера SAX и передать его вашему обработчику:
SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); parser.parse(binaryStream, myHandler);или разобрать значение XML с помощью парсера StAX:
XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader streamReader = factory.createXMLStreamReader(binaryStream);
Поскольку базы данных могут использовать оптимизированное представление XML, доступ к значению через getSource() и setResult() может повысить производительность обработки, позволяя избежать сериализации в потоковое представление и разбора XML.
Например, чтобы получить узел DOM Document:
DOMSource domSource = sqlxml.getSource(DOMSource.class); Document document = (Document) domSource.getNode();или задать значение узлу DOM 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();или выполнить преобразования XSLT значения XML с использованием XSLT из xsltFile и записать результат в файл 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);
или вычислить выражение XPath для значения XML: 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);
Любой Source можно преобразовать в Result с помощью тождественного преобразования, указанного вызовом 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);
Чтобы вывести содержимое Source в стандартный вывод: Transformer identity = TransformerFactory.newInstance().newTransformer(); Source source = sqlxml.getSource(null); Result result = new StreamResult(System.out); identity.transform(source, result);Чтобы создать DOMSource из DOMResult:
DOMSource domSource = new DOMSource(domResult.getNode());
Неполные или некорректные значения XML могут привести к возникновению SQLException при их задании либо при вызове execute(). Перед вызовом execute() необходимо закрыть все потоки, иначе будет выброшено SQLException.
Чтение и запись значений XML из объекта SQLXML или в него могут выполняться не более одного раза. Концептуальные состояния «доступен для чтения» и «недоступен для чтения» определяют, вернёт ли один из API чтения значение или выбросит исключение. Концептуальные состояния «доступен для записи» и «недоступен для записи» определяют, задаст ли один из API записи значение или выбросит исключение.
Состояние меняется с доступного для чтения на недоступное для чтения после вызова free() или любого из API чтения: getBinaryStream(), getCharacterStream(), getSource() и getString(). Реализации также могут при этом менять состояние на недоступное для записи.
Состояние меняется с доступного для записи на недоступное для записи после вызова free() или любого из API записи: setBinaryStream(), setCharacterStream(), setResult() и setString(). Реализации также могут при этом менять состояние на недоступное для чтения.
Все методы интерфейса SQLXML должны быть полностью реализованы, если драйвер JDBC поддерживает этот тип данных.
- Начиная с:
- 1.6
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
free() |
Этот метод закрывает данный объект и освобождает удерживаемые им ресурсы. |
InputStream |
getBinaryStream() |
Получает значение XML, представленное данным экземпляром SQLXML, в виде потока. |
Reader |
getCharacterStream() |
Получает значение XML, представленное данным экземпляром SQLXML, в виде объекта java.io.Reader. |
<T extends Source> |
getSource |
Возвращает Source для чтения значения XML, представленного данным экземпляром SQLXML. |
String |
getString() |
Возвращает строковое представление значения XML, представленного данным экземпляром SQLXML. |
OutputStream |
setBinaryStream() |
Получает поток, который можно использовать для записи значения XML, представленного данным экземпляром SQLXML. |
Writer |
setCharacterStream() |
Получает поток для записи значения XML, представленного данным экземпляром SQLXML. |
<T extends Result> |
setResult |
Возвращает Result для задания значения XML, представленного данным экземпляром SQLXML. |
void |
setString |
Задаёт для значения XML, представленного данным экземпляром SQLXML, указанное строковое представление. |
Подробное описание методов
free
void free() throws SQLException
free любая попытка вызвать метод, отличный от free, приведёт к выбрасыванию SQLException. Если free вызывается несколько раз, последующие вызовы free не выполняют никаких действий.- Выбрасывает:
-
SQLException— если при освобождении значения XML произошла ошибка. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
getBinaryStream
InputStream getBinaryStream() throws SQLException
После вызова этого метода объект SQL XML становится недоступным для чтения и, в зависимости от реализации, может также стать недоступным для записи.
- Возвращает:
- поток, содержащий данные XML.
- Выбрасывает:
-
SQLException— если при обработке значения XML произошла ошибка. Если состояние не допускает чтение, выбрасывается исключение. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
setBinaryStream
OutputStream setBinaryStream() throws SQLException
После вызова этого метода объект SQL XML становится недоступным для записи и, в зависимости от реализации, может также стать недоступным для чтения.
- Возвращает:
- поток, в который можно записывать данные.
- Выбрасывает:
-
SQLException— если при обработке значения XML произошла ошибка. Если состояние не допускает запись, выбрасывается исключение. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
getCharacterStream
Reader getCharacterStream() throws SQLException
После вызова этого метода объект SQL XML становится недоступным для чтения и, в зависимости от реализации, может также стать недоступным для записи.
- Возвращает:
- поток, содержащий данные XML.
- Выбрасывает:
-
SQLException— если при обработке значения XML произошла ошибка. Метод getCause() исключения может предоставить более подробную информацию, например, если поток содержит недопустимые символы. Если состояние не допускает чтение, выбрасывается исключение. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
setCharacterStream
Writer setCharacterStream() throws SQLException
После вызова этого метода объект SQL XML становится недоступным для записи и, в зависимости от реализации, может также стать недоступным для чтения.
- Возвращает:
- поток, в который можно записывать данные.
- Выбрасывает:
-
SQLException— если при обработке значения XML произошла ошибка. Метод getCause() исключения может предоставить более подробную информацию, например, если поток содержит недопустимые символы. Если состояние не допускает запись, выбрасывается исключение. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
getString
String getString() throws SQLException
После вызова этого метода объект SQL XML становится недоступным для чтения и, в зависимости от реализации, может также стать недоступным для записи.
- Возвращает:
- строковое представление значения XML, представленного данным экземпляром SQLXML.
- Выбрасывает:
-
SQLException— если при обработке значения XML произошла ошибка. Метод getCause() исключения может предоставить более подробную информацию, например, если поток содержит недопустимые символы. Если состояние не допускает чтение, выбрасывается исключение. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
setString
void setString(String value) throws SQLException
После вызова этого метода объект SQL XML становится недоступным для записи и, в зависимости от реализации, может также стать недоступным для чтения.
- Параметры:
-
value— значение XML - Выбрасывает:
-
SQLException— если при обработке значения XML произошла ошибка. Метод getCause() исключения может предоставить более подробную информацию, например, если поток содержит недопустимые символы. Если состояние не допускает запись, выбрасывается исключение. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
getSource
<T extends Source> T getSource(Class<T> sourceClass) throws SQLException
Для Source, используемых XML-парсерами, обработка пространств имён включена по умолчанию. Значение systemID для Source зависит от реализации.
После вызова этого метода объект SQL XML становится недоступным для чтения и, в зависимости от реализации, может также стать недоступным для записи.
Обратите внимание, что SAX использует архитектуру обратных вызовов, поэтому возвращённому SAXSource следует назначить обработчик содержимого, который будет получать события SAX при разборе. Обработчик содержимого будет получать обратные вызовы на основе содержимого XML.
SAXSource saxSource = sqlxml.getSource(SAXSource.class); XMLReader xmlReader = saxSource.getXMLReader(); xmlReader.setContentHandler(myHandler); xmlReader.parse(saxSource.getInputSource());
- Параметры типа:
T— тип класса, моделируемого этим объектом Class- Параметры:
-
sourceClass— класс источника или null. Если класс равен null, будет возвращена реализация Source, специфичная для поставщика. Как минимум поддерживаются следующие классы: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
- Возвращает:
- Source для чтения значения XML.
- Выбрасывает:
-
SQLException— если при обработке значения XML произошла ошибка или эта функция не поддерживается. Метод getCause() исключения может предоставить более подробную информацию, например, если возникло исключение XML-парсера. Если состояние не допускает чтение, выбрасывается исключение. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
setResult
<T extends Result> T setResult(Class<T> resultClass) throws SQLException
Значение systemID для Result зависит от реализации.
После вызова этого метода объект SQL XML становится недоступным для записи и, в зависимости от реализации, может также стать недоступным для чтения.
Обратите внимание, что SAX использует архитектуру обратных вызовов, а возвращённому SAXResult назначается обработчик содержимого, который будет получать события SAX на основе содержимого XML. Чтобы задать значения, вызовите обработчик содержимого и передайте ему содержимое документа 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();
- Параметры типа:
T— тип класса, моделируемого этим объектом Class- Параметры:
-
resultClass— класс результата или null. Если resultClass равен null, будет возвращена реализация Result, специфичная для поставщика. Как минимум поддерживаются следующие классы: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
- Возвращает:
- Возвращает Result для задания значения XML.
- Выбрасывает:
-
SQLException— если при обработке значения XML произошла ошибка или эта функция не поддерживается. Метод getCause() исключения может предоставить более подробную информацию, например, если возникло исключение XML-парсера. Если состояние не допускает запись, выбрасывается исключение. -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с:
- 1.6
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.sql/java/sql/SQLXML.html