Интерфейс SQLXML

public interface SQLXML

Сопоставление в языке программирования JavaTM для типа SQL XML. XML — это встроенный тип, который хранит значение XML в качестве значения столбца в строке таблицы базы данных. По умолчанию драйверы реализуют объект SQLXML как логическую ссылку на данные XML, а не на сами данные. Объект SQLXML действителен в течение транзакции, в которой он был создан.

Интерфейс SQLXML предоставляет методы для доступа к значению XML в виде строки, потока чтения или записи или в виде потока. К значению XML также можно получить доступ через источник или установить в качестве результата, которые используются с 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 в мой узел:
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 поддерживает тип данных.

С:
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>
T
getSource​(Class<T> sourceClass)

Возвращает источник для чтения значения XML, обозначенного этим экземпляром SQLXML.

String getString()

Возвращает строковое представление значения XML, обозначенного этим экземпляром SQLXML.

OutputStream setBinaryStream()

Извлекает поток, который может использоваться для записи значения XML, которое представляет этот экземпляр SQLXML.

Writer setCharacterStream()

Извлекает поток для записи значения XML, которое представляет этот экземпляр SQLXML.

<T extends Result>
T
setResult​(Class<T> resultClass)

Возвращает результат для установки значения XML, обозначенного этим экземпляром SQLXML.

void setString​(String value)

Устанавливает значение XML, обозначенное этим экземпляром SQLXML, в заданное строковое представление.

Методы

free

void free()
   throws SQLException

Этот метод закрывает этот объект и освобождает ресурсы, которые он удерживал. Объект SQL XML становится недоступным для чтения и записи после вызова этого метода. После того, как free был вызван, любая попытка вызвать метод, кроме free, приведет к возникновению SQLException. Если free вызывается несколько раз, последующие вызовы free обрабатываются как no-op.

Вызывает:
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 объекта 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

Возвращает объект 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.sql/java/sql/SQLXML.html

Spec-Zone .ru
спецификации, руководства, описания, API