Интерфейс SQLXML
public interface SQLXML
Интерфейс SQLXML предоставляет методы для доступа к значению XML в виде строки, потока чтения или записи или потока. Значение XML также можно получить через источник или установить в результате, которые используются с API-интерфейсами парсеров XML, такими как DOM, SAX и StAX, а также с преобразованиями XSLT и вычислениями XPath.
Методы в интерфейсах ResultSet, CallableStatement и PreparedStatement, такие как getSQLXML, позволяют программисту получить доступ к значению XML. Кроме того, этот интерфейс имеет методы для обновления значения XML.
Значение XML экземпляра SQLXML можно получить как двоичный поток, используя
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:
DOMSource domSource = sqlxml.getSource(DOMSource.class); Document document = (Document) domSource.getNode();или для установки значения в узел документа DOM в 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);
Любой источник может быть преобразован в результат с использованием преобразования тождества, заданного вызовом 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);
Для записи содержимого источника в стандартный вывод: 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 поддерживает тип данных.
- Since:
- 1.6
- See Also:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
free() |
Этот метод закрывает этот объект и освобождает ресурсы, которые он удерживал. |
InputStream |
getBinaryStream() |
Возвращает значение XML, обозначенное этим экземпляром SQLXML, как поток. |
Reader |
getCharacterStream() |
Возвращает значение XML, обозначенное этим экземпляром SQLXML, как объект java.io.Reader. |
<T extends Source> |
getSource |
Возвращает источник для чтения значения XML, обозначенного этим экземпляром SQLXML. |
String |
getString() |
Возвращает строковое представление значения XML, обозначенного этим экземпляром SQLXML. |
OutputStream |
setBinaryStream() |
Возвращает поток, который можно использовать для записи значения XML, которое представляет этот экземпляр SQLXML. |
Writer |
setCharacterStream() |
Возвращает поток для записи значения XML, которое представляет этот экземпляр SQLXML. |
<T extends Result> |
setResult |
Возвращает результат для установки значения XML, обозначенного этим экземпляром SQLXML. |
void |
setString |
Устанавливает значение XML, обозначенное этим экземпляром SQLXML, в заданное строковое представление. |
Подробное описание методов
free
void free() throws SQLException
free был вызван, любая попытка вызвать метод, отличный от free, приведет к сбросу SQLException. Если free вызывается несколько раз, последующие вызовы free обрабатываются как no-op.- Выбрасывает:
-
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 будут по умолчанию иметь включенную обработку имен пространств имён. systemID источника зависит от реализации.
Объект 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, будет возвращена реализация источника, специфичная для поставщика. Минимально поддерживаются следующие классы: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
- Возвращает:
- Источник для чтения значения XML.
- Выбрасывает:
-
SQLException- если возникла ошибка при обработке значения XML или если эта функция не поддерживается. Метод getCause() исключения может предоставить более подробное исключение, например, если произошла ошибка парсера XML. Исключение выбрасывается, если состояние не разрешает чтение. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
setResult
<T extends Result> T setResult(Class<T> resultClass) throws SQLException
Идентификатор системы (systemID) результата зависит от реализации.
Объект 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();
- Type Parameters:
T- тип класса, моделируемого этим объектом Class- Parameters:
-
resultClass- Класс результата или null. Если resultClass равен null, будет возвращена реализация результата, специфичная для поставщика. По меньшей мере, поддерживаются следующие классы: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:
- Возвращает результат для установки значения XML.
- Throws:
-
SQLException- если произошла ошибка при обработке значения XML или если эта функция не поддерживается. Метод getCause() исключения может предоставить более подробное исключение, например, если произошла ошибка парсера XML. Исключение генерируется, если состояние не доступно для записи. -
SQLFeatureNotSupportedException- если JDBC драйвер не поддерживает этот метод - Since:
- 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://download.java.net/java/early_access/jdk24/docs/api/java.sql/java/sql/SQLXML.html