Интерфейс SQLXML
- Все суперинтерфейсы:
AutoCloseable
public interface SQLXML extends AutoCloseable
Интерфейс 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 записи значение или выбросит исключение.
Состояние меняется с «доступен для чтения» на «недоступен для чтения» после вызова close(), free() или любого из API чтения: getBinaryStream(), getCharacterStream(), getSource() и getString(). При этом реализации также могут менять состояние на «недоступен для записи».
Состояние меняется с «доступен для записи» на «недоступен для записи» после вызова close(), free() или любого из API записи: setBinaryStream(), setCharacterStream(), setResult() и setString(). При этом реализации также могут менять состояние на «недоступен для чтения».
Чтобы освободить ресурсы, используемые объектом SQLXML, приложения должны вызвать метод free() или close(). Любая попытка вызвать метод, отличный от free() или close(), после закрытия объекта SQLXML приведет к выбрасыванию SQLException.
Если драйвер JDBC поддерживает этот тип данных, должны быть полностью реализованы все методы интерфейса SQLXML.
- Начиная с версии:
- 1.6
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
default void |
close() |
Закрывает объект SQLXML и освобождает удерживаемые им ресурсы. |
void |
free() |
Закрывает объект SQLXML и освобождает удерживаемые им ресурсы. |
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
SQLXML и освобождает удерживаемые им ресурсы. Если объект SQLXML уже закрыт, вызов этого метода не дает никакого эффекта.
- Выбрасывает:
-
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
Для XML-парсеров обработка пространств имен в Source включена по умолчанию. Значение 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
close
default void close() throws SQLException
SQLXML и освобождает удерживаемые им ресурсы. Если объект SQLXML уже закрыт, вызов этого метода не дает никакого эффекта.
- Определено в:
-
closeв интерфейсеAutoCloseable - Требования к реализации:
- Реализация по умолчанию вызывает метод
free(). - Выбрасывает:
-
SQLException— если при освобождении ресурсов SQLXML произошла ошибка -
SQLFeatureNotSupportedException— если драйвер JDBC не поддерживает этот метод - Начиная с версии:
- 26
- См. также:
© 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.