Поделиться через


Программирование с SQLXML.

Скачать драйвер JDBC

В этом разделе описывается, как использовать методы API Microsoft JDBC Driver for SQL Server для хранения и извлечения XML-документа из реляционной базы данных с объектами SQLXML .

В этом разделе также содержатся сведения о типах объектов SQLXML и список важных рекомендаций и ограничений при работе с объектами SQLXML.

Чтение и запись XML-данных с использованием объектов SQLXML

В следующем списке описывается, как использовать методы API Microsoft JDBC Driver для SQL Server для чтения и записи XML-данных с объектами SQLXML:

  • Для создания объекта SQLXML используйте метод createSQLXML класса SQLServerConnection. Обратите внимание, что этот метод создает объект SQLXML без данных. Чтобы добавить данные xml к объекту SQLXML, вызовите один из следующих методов, определенных в интерфейсе SQLXML: setResult, setCharacterStream, setBinaryStream или setString.

  • Чтобы извлечь сам объект SQLXML, используйте методы getSQLXML класса SQLServerResultSet или класса SQLServerCallableStatement.

  • Чтобы получить данные xml из объекта SQLXML, вызовите один из следующих методов, определенных в интерфейсе SQLXML: getSource, getCharacterStream, getBinaryStream или getString.

  • Чтобы обновить данные xml в объекте SQLXML, используйте метод updateSQLXML класса SQLServerResultSet.

  • Чтобы сохранить объект SQLXML в столбце таблицы базы данных типа xml, используйте методы setSQLXML класса SQLServerPreparedStatement или класса SQLServerCallableStatement.

В коде с примером типа данных SQLXML демонстрируется, как выполнять распространенные задачи API.

Читаемые и записываемые объекты SQLXML

В следующей таблице перечислены типы объектов SQLXML, поддерживаемые методами задания, считывания и обновления свойств, предоставленными JDBC API. Столбцы в таблице ссылаются на следующее:

  • В столбце Имя метода перечислены поддерживаемые методы получения, задания и обновления в API JDBC.

  • Столбец Объект получения SQLXML представляет объект SQLXML, созданный методом getSQLXML класса SQLServerCallableStatement или методом getSQLXML класса SQLServerResultSet.

  • Столбец Объект задания SQLXML представляет объект SQLXML, созданный методом createSQLXML класса SQLServerConnection. Обратите внимание, что метод задания, описанный ниже, принимает только объект SQLXML, созданный методом createSQLXML.

Имя метода Объект считывания SQLXML

(читаемый)
Объект задания SQLXML

(записываемый)
CallableStatement.setSQLXML() Не поддерживается Поддерживается
CallableStatement.setObject() Не поддерживается Поддерживается
PreparedStatement.setSQLXML() Не поддерживается Поддерживается
PreparedStatement.setObject() Не поддерживается Поддерживается
ResultSet.updateSQLXML() Не поддерживается Поддерживается
ResultSet.updateObject() Не поддерживается Поддерживается
ResultSet.getSQLXML() Поддерживается Не поддерживается
CallableStatement.getSQLXML() Поддерживается Не поддерживается

Как показано в таблице выше, методы задания SQLXML не будут работать при использовании с читаемыми объектами SQLXML; аналогичным образом методы считывания не будут работать при использовании с записываемыми объектами SQLXML.

Если приложение вызывает метод setObject с помощью указания параметра масштаба или длины объекта SQLXML, параметр масштаба или длины пропускается.

Рекомендации и ограничения, связанные с использованием объектов SQLXML

Приложения могут использовать объекты SQLXML для чтения и записи данных XML в базе данных. В следующем списке содержатся сведения об определенных ограничениях и рекомендациях при использовании объектов SQLXML:

  • Объект SQLXML является действительным только во время выполнении транзакции, в которой он был создан.

  • Объект SQLXML, полученный методом считывания, может быть использован только для чтения данных.

  • Объект SQLXML, созданный методом соединения, может быть использован только для записи данных.

  • Приложение может вызвать только один метод считывания на читаемом объекте SQLXML для чтения данных. После вызова метода считывания в работе всех остальных методов считывания и задания на этом же объекте SQLXML произойдет ошибка.

  • Приложение может вызвать метод free на объекте SQLXML только после его чтения или записи. Однако еще сохраняется возможность обработки возвращенного потока или источника, если базовый столбец или параметр активен. Если базовый столбец или параметр становится неактивен, то будет закрыт поток или источник, связанный с объектом SQLXML. Если базовый столбец или параметр более не является допустимым, то базовые данные будут недоступны для методов считывания Stream, Simple API for XML (SAX) и Streaming API for XML (StAX).

  • Приложение может вызвать только один метод задания на записываемом объекте SQLXML. После вызова метода задания в работе всех остальных методов считывания и задания на этом же объекте SQLXML произойдет ошибка.

  • Чтобы задать данные для объекта SQLXML, приложение должно использовать соответствующий метод задания и функции в возвращенном объекте.

  • Методы getSQLXML классов SQLServerCallableStatement и SQLServerResultSet возвращают данные null, если для базового столбца задано значение null.

  • Объекты метода задания являются допустимыми в период выполнения соединения, в котором они были созданы.

  • Приложения не могут задавать значение null с помощью методов задания, предоставленных интерфейсом SQLXML. Приложения могут задавать пустую строку с помощью методов задания, предоставленных в интерфейсе SQLXML. Чтобы задать значение null, приложения должны вызвать одно из следующего.

  • При работе с XML-документами рекомендуется использовать средства синтаксического анализа Simple API for XML (SAX) и Streaming API for XML (StAX) вместо средств синтаксического анализа модели DOM, т.к. они обеспечивают более высокий уровень производительности.

Средства синтаксического анализа XML не могут обрабатывать пустые значения. Однако SQL Server позволяет приложениям извлекать и сохранять пустые значения в столбцах баз данных типа данных XML. Это означает, что если базовое значение пустое, то при синтаксическом анализе XML-данных средство синтаксического анализа вызовет исключение. При использовании выходных значений DOM драйвер JDBC обрабатывает это исключение и вызывает ошибку. При работе с выходными значениями SAX и Stax ошибка вызывается средством синтаксического анализа напрямую.

Адаптивная буферизация и поддержка SQLXML

Двоичные и символьные потоки, возвращаемые объектом SQLXML, поддерживают режимы адаптивной и полной буферизации. С другой стороны, если средства синтаксического анализа XML не являются потоками, они не поддерживают настройки адаптивной и полной буферизации. Дополнительные сведения об использовании адаптивной буферизации см. в этой статье.

См. также

Поддержка данных XML