Интерфейс SQLXML
public interface SQLXML
Картирование в языке программирования JavaTM для типа SQL XML. XML — это встроенный тип, который хранит значение XML в качестве значения столбца в строке таблицы базы данных. По умолчанию драйверы реализуют объект SQLXML как логическую ссылку на данные XML, а не на сами данные. Объект SQLXML действителен в течение транзакции, в которой он был создан.
Интерфейс SQLXML предоставляет методы для доступа к значению XML в виде строки, объекта Reader или Writer или потока. Значение 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:
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); Любой 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-драйвер поддерживает тип данных.
- Since:
- 1.6
- См. также:
-
javax.xml.parsers,javax.xml.stream,javax.xml.transform,javax.xml.xpath
Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
free() Этот метод закрывает этот объект и освобождает ресурсы, которые он содержал. |
InputStream |
getBinaryStream() Извлекает значение XML, обозначенное этим экземпляром SQLXML, в виде потока. |
Reader |
getCharacterStream() Возвращает значение XML, обозначенное этим экземпляром SQLXML, как объект java.io.Reader. |
<T extends Source> |
getSource(Class<T> sourceClass) Возвращает Source для чтения значения XML, обозначенного этим экземпляром SQLXML. |
String |
getString() Возвращает строковое представление значения XML, обозначенного этим экземпляром SQLXML. |
OutputStream |
setBinaryStream() Извлекает поток, который можно использовать для записи значения XML, которое представляет этот экземпляр SQLXML. |
Writer |
setCharacterStream() Возвращает поток, используемый для записи значения XML, представляемого этим экземпляром SQLXML. |
<T extends Result> |
setResult(Class<T> resultClass) Возвращает Result для установки значения XML, обозначенного этим экземпляром SQLXML. |
void |
setString(String value) Устанавливает значение XML, обозначенное этим экземпляром SQLXML, в заданное строковое представление. |
Методы
free
void free() throws SQLException
Этот метод закрывает этот объект и освобождает ресурсы, которые он удерживал. Объект SQL XML становится недоступным для чтения и записи после вызова этого метода. После того, как free был вызван, любая попытка вызвать метод, отличный от free, приведет к выбрасыванию SQLException. Если free вызывается несколько раз, последующие вызовы free обрабатываются как нетранзакционные.
- Исключение:
-
SQLException- если произошла ошибка при освобождении значения XML. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
getBinaryStream
InputStream getBinaryStream()
throws SQLException Извлекает значение XML, обозначенное этим экземпляром SQLXML, в виде потока. Байты входного потока интерпретируются в соответствии с приложением F спецификации XML 1.0. Поведение этого метода такое же, как у ResultSet.getBinaryStream(), когда указанный столбец ResultSet имеет тип java.sql.Types SQLXML.
Объект SQL XML становится недоступным для чтения после вызова этого метода, и может также стать недоступным для записи в зависимости от реализации.
- Возвращает:
- поток, содержащий данные XML.
- Исключение:
-
SQLException- если произошла ошибка при обработке значения XML. Исключение выбрасывается, если состояние не является читаемым. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
setBinaryStream
OutputStream setBinaryStream()
throws SQLException Возвращает поток, который можно использовать для записи значения XML, которое представляет этот экземпляр SQLXML. Поток начинается с позиции 0. Байты потока интерпретируются в соответствии с приложением F спецификации XML 1.0. Поведение этого метода такое же, как у ResultSet.updateBinaryStream(), когда указанный столбец ResultSet имеет тип java.sql.Types SQLXML.
Объект SQL XML становится недоступным для записи после вызова этого метода, и может также стать недоступным для чтения в зависимости от реализации.
- Возвращает:
- поток, в который можно записывать данные.
- Исключение:
-
SQLException- если произошла ошибка при обработке значения XML. Исключение выбрасывается, если состояние не является записываемым. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
getCharacterStream
Reader getCharacterStream()
throws SQLException Извлекает значение XML, обозначенное этим экземпляром SQLXML, как объект java.io.Reader. Формат этого потока определяется org.xml.sax.InputSource, где символы в потоке представляют собой кодовые точки Unicode для XML в соответствии с разделом 2 и приложением B спецификации XML 1.0. Хотя может присутствовать объявление кодировки, отличное от Unicode, кодировка потока — Unicode. Поведение этого метода такое же, как у ResultSet.getCharacterStream(), когда указанный столбец ResultSet имеет тип java.sql.Types SQLXML.
Объект SQL XML становится недоступным для чтения после вызова этого метода, и может также стать недоступным для записи в зависимости от реализации.
- Возвращает:
- поток, содержащий данные XML.
- Исключение:
-
SQLException- если произошла ошибка при обработке значения XML. Метод getCause() исключения может предоставить более подробное исключение, например, если поток не содержит допустимых символов. Исключение выбрасывается, если состояние не является читаемым. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
setCharacterStream
Writer setCharacterStream()
throws SQLException Извлекает поток, который можно использовать для записи значения XML, которое представляет этот экземпляр SQLXML. Формат этого потока определяется org.xml.sax.InputSource, где символы в потоке представляют собой кодовые точки Unicode для XML в соответствии с разделом 2 и приложением B спецификации XML 1.0. Хотя может присутствовать объявление кодировки, отличное от Unicode, кодировка потока — Unicode. Поведение этого метода такое же, как у ResultSet.updateCharacterStream(), когда указанный столбец ResultSet имеет тип java.sql.Types SQLXML.
Объект SQL XML становится недоступным для записи после вызова этого метода, и может также стать недоступным для чтения в зависимости от реализации.
- Возвращает:
- поток, в который можно записывать данные.
- Исключение:
-
SQLException- если произошла ошибка при обработке значения XML. Метод getCause() исключения может предоставить более подробное исключение, например, если поток не содержит допустимых символов. Исключение выбрасывается, если состояние не является записываемым. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
getString
String getString()
throws SQLException Возвращает строковое представление значения XML, обозначенного этим экземпляром SQLXML. Формат этой строки определяется org.xml.sax.InputSource, где символы в потоке представляют собой кодовые точки Unicode для XML в соответствии с разделом 2 и приложением B спецификации XML 1.0. Хотя может присутствовать объявление кодировки, отличное от Unicode, кодировка строки — Unicode. Поведение этого метода такое же, как у ResultSet.getString(), когда указанный столбец ResultSet имеет тип java.sql.Types SQLXML.
Объект SQL XML становится недоступным для чтения после вызова этого метода, и может также стать недоступным для записи в зависимости от реализации.
- Возвращает:
- строковое представление значения XML, обозначенного этим экземпляром SQLXML.
- Исключение:
-
SQLException- если произошла ошибка при обработке значения XML. Метод getCause() исключения может предоставить более подробное исключение, например, если поток не содержит допустимых символов. Исключение выбрасывается, если состояние не является читаемым. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
setString
void setString(String value)
throws SQLException Устанавливает значение XML, обозначенное этим экземпляром SQLXML, на заданное строковое представление. Формат этой строки определяется org.xml.sax.InputSource, где символы в потоке представляют собой кодовые точки Unicode для XML в соответствии с разделом 2 и приложением B спецификации XML 1.0. Хотя может присутствовать объявление кодировки, отличное от Unicode, кодировка строки — Unicode. Поведение этого метода такое же, как у ResultSet.updateString(), когда указанный столбец ResultSet имеет тип java.sql.Types SQLXML.
Объект SQL XML становится недоступным для записи после вызова этого метода, и может также стать недоступным для чтения в зависимости от реализации.
- Параметры:
-
value- значение XML - Исключение:
-
SQLException- если произошла ошибка при обработке значения XML. Метод getCause() исключения может предоставить более подробное исключение, например, если поток не содержит допустимых символов. Исключение выбрасывается, если состояние не является записываемым. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
getSource
<T extends Source> T getSource(Class<T> sourceClass)
throws SQLException Возвращает Source для чтения значения XML, обозначенного этим экземпляром SQLXML. Источники используются в качестве входных данных для парсеров XML и трансформаторов XSLT.
Источники для парсеров 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
- Возвращает:
- Source для чтения значения XML.
- Исключение:
-
SQLException- если произошла ошибка при обработке значения XML или эта функция не поддерживается. Метод getCause() исключения может предоставить более подробное исключение, например, если произошла ошибка парсера XML. Исключение выбрасывается, если состояние не является читаемым. -
SQLFeatureNotSupportedException- если драйвер JDBC не поддерживает этот метод - С:
- 1.6
setResult
<T extends Result> T setResult(Class<T> resultClass)
throws SQLException Возвращает Result для установки значения XML, обозначенного этим экземпляром SQLXML.
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, 2020, 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.