Spec-Zone.ru › OpenJDK 21

Пакет javax.sql

package javax.sql
Предоставляет API для доступа к источникам данных на стороне сервера и обработки данных на языке программирования Java. Этот пакет дополняет пакет java.sql и, начиная с версии 1.4, включен в Java Platform, Standard Edition (Java SE). Он по-прежнему является неотъемлемой частью Java Platform, Enterprise Edition (Java EE).

Пакет javax.sql предоставляет следующее:

  1. Интерфейс DataSource в качестве альтернативы интерфейсу DriverManager для установления соединения с источником данных
  2. Пулы подключений и пулы заявок
  3. Распределенные транзакции
  4. Наборы строк

Приложения используют API DataSource и RowSet напрямую, но API пулов подключений и распределенных транзакций используются внутри инфраструктуры среднего уровня.

Использование объекта DataSource для создания соединения

Пакет javax.sql предоставляет предпочтительный способ создания соединения с источником данных. Класс DriverManager, первоначальный механизм, по-прежнему валиден, и код, использующий его, продолжит работать. Однако, новый механизм DataSource предпочтительнее, так как он предлагает много преимуществ по сравнению с механизмом DriverManager.

Вот основные преимущества использования объекта DataSource для создания соединения:

  • Можно изменять свойства источника данных, что означает, что при изменении чего-либо в источнике данных или драйвере не требуется вносить изменения в код приложения.
  • Пулы подключений и заявок, а также распределенные транзакции доступны через объект DataSource, реализованный для работы с инфраструктурой среднего уровня. Соединения, созданные через DriverManager, не имеют возможностей пула подключений и заявок или распределенных транзакций.

Поставщики драйверов предоставляют реализации DataSource. Конкретный объект DataSource представляет конкретный физический источник данных, и каждое соединение, которое создает объект DataSource , является соединением с этим физическим источником данных.

Логическое имя источника данных регистрируется в службе именования, использующей API Java Naming and Directory Interface (JNDI), обычно системным администратором или лицом, выполняющим обязанности системного администратора. Приложение может получить нужный ему объект DataSource , выполнив поиск по зарегистрированному логическому имени. Затем приложение может использовать объект DataSource для создания соединения с физическим источником данных, который он представляет.

Объект DataSource может быть реализован для работы с инфраструктурой среднего уровня, чтобы создаваемые им соединения были объединены для повторного использования. Приложение, использующее такую реализацию DataSource , автоматически получит подключение, участвующее в пуле подключений. Объект DataSource также может быть реализован для работы с инфраструктурой среднего уровня, чтобы создаваемые им соединения могли использоваться для распределенных транзакций без специального кодирования.

Пулы подключений и пулы заявок

Соединения, созданные через объект DataSource, реализованный для работы с менеджером пула подключений среднего уровня, будут участвовать в пуле подключений. Это может значительно улучшить производительность, так как создание новых соединений очень дорого. Пул подключений позволяет использовать и повторно использовать соединение, существенно сокращая количество новых создаваемых соединений.

Пул подключений полностью прозрачен. Он выполняется автоматически на среднем уровне конфигурации Java EE, поэтому с точки зрения приложения изменения в коде не требуются. Приложение просто использует метод DataSource.getConnection для получения подключенного соединения и использует его так же, как и любой объект Connection.

Классы и интерфейсы, используемые для пула подключений:

  • ConnectionPoolDataSource
  • PooledConnection
  • ConnectionEvent
  • ConnectionEventListener
  • StatementEvent
  • StatementEventListener
Менеджер пула подключений, компонент на среднем уровне трехслойной архитектуры, использует эти классы и интерфейсы в фоновом режиме. Когда объект ConnectionPoolDataSource вызывается для создания объекта PooledConnection, менеджер пула подключений зарегистрируется как объект ConnectionEventListener с новым объектом PooledConnection. При закрытии подключения или возникновении ошибки менеджер пула подключений (как слушатель) получает уведомление, включающее объект ConnectionEvent.

Если менеджер пула подключений поддерживает пулы заявок, например Statement, что можно определить, вызвав метод DatabaseMetaData.supportsStatementPooling, менеджер пула подключений зарегистрируется как объект StatementEventListener с новым объектом PooledConnection. При закрытии подключения или возникновении ошибки менеджер пула подключений (как слушатель) получает уведомление, включающее объект StatementEvent.

Распределенные транзакции

Как и в случае с подключенными соединениями, соединения, созданные через объект DataSource, реализованный для работы с инфраструктурой среднего уровня, могут участвовать в распределенных транзакциях. Это дает приложению возможность включать источники данных на нескольких серверах в одну транзакцию.

Классы и интерфейсы, используемые для распределенных транзакций:

  • XADataSource
  • XAConnection
Эти интерфейсы используются менеджером транзакций; приложение не использует их напрямую.

Интерфейс XAConnection наследуется от интерфейса PooledConnection, поэтому то, что применимо к подключенному соединению, также применимо к соединению, являющемуся частью распределенной транзакции. Менеджер транзакций на среднем уровне обрабатывает все прозрачно. Единственное изменение в коде приложения заключается в том, что приложение не может делать ничего, что могло бы помешать обработке транзакции менеджером транзакций. В частности, приложение не может вызывать методы Connection.commit или Connection.rollback, и оно не может установить соединение в режим автоматического подтверждения (т.е., не может вызвать Connection.setAutoCommit(true)).

Приложению не нужно делать ничего особенного для участия в распределенной транзакции. Оно просто создает соединения с необходимыми источниками данных с помощью метода DataSource.getConnection так же, как и обычно. Менеджер транзакций управляет транзакцией за кулисами. Интерфейс XADataSource создает объекты XAConnection, и каждый объект XAConnection создает объект XAResource, который менеджер транзакций использует для управления соединением.

Наборы строк

Интерфейс RowSet работает с различными другими классами и интерфейсами за кулисами. Их можно сгруппировать в три категории.
  1. Уведомление об событиях
    • RowSetListener
      Объект RowSet является компонентом JavaBeans, так как имеет свойства и участвует в механизме уведомлений об событиях JavaBeans. Интерфейс RowSetListener реализуется компонентом, который хочет получать уведомления об событиях, происходящих с конкретным объектом RowSet. Такой компонент регистрируется как слушатель в наборе строк (rowset) через метод RowSet.addRowSetListener.

      Когда объект RowSet изменяет одну из своих строк, все свои строки или перемещает свой курсор, он также уведомляет каждого зарегистрированного слушателя. Слушатель реагирует, выполняя реализацию метода уведомления, вызываемого для него.

    • RowSetEvent
      В рамках своего внутреннего процесса уведомления объект RowSet создаёт экземпляр RowSetEvent и передает его слушателю. Слушатель может использовать этот объект RowSetEvent для определения того, какой набор строк (rowset) вызвал событие.
  2. Метаданные
    • RowSetMetaData
      Этот интерфейс, производный от интерфейса ResultSetMetaData, предоставляет информацию о столбцах в объекте RowSet. Приложение может использовать методы RowSetMetaData для определения количества столбцов в наборе строк (rowset) и типа данных каждого столбца.

      Интерфейс RowSetMetaData предоставляет методы для установки информации о столбцах, но приложение обычно не использует эти методы. Когда приложение вызывает метод RowSet execute, объект RowSet будет содержать новый набор строк, а его объект RowSetMetaData будет внутренне обновлён, чтобы содержать информацию о новых столбцах.

  3. Модуль чтения/записи
    Объект RowSet, реализующий интерфейс RowSetInternal, может вызвать метод объекта RowSetReader, связанного с ним, чтобы заполнить себя данными. Он также может вызвать метод объекта RowSetWriter, связанного с ним, чтобы записать все изменения в его строках обратно в источник данных, из которого он изначально получил эти строки. Набор строк (rowset), остающийся подключенным к источнику данных, не нуждается в использовании модулей чтения и записи, так как может просто работать напрямую с источником данных.
    • RowSetInternal
      Реализуя интерфейс RowSetInternal, объект RowSet получает доступ к своему внутреннему состоянию и может вызвать методы своего модуля чтения и записи. Набор строк (rowset) отслеживает значения в текущих строках и значения, которые непосредственно предшествовали текущим, называемые исходными значениями. Набор строк (rowset) также отслеживает (1) параметры, установленные для его команды, и (2) подключение, если оно было передано. Набор строк (rowset) использует методы RowSetInternal для доступа к этой информации. Приложение обычно не вызывает эти методы напрямую.
    • RowSetReader
      Отключённый объект RowSet , реализовавший интерфейс RowSetInternal, может вызвать метод своего модуля чтения (объект RowSetReader , связанный с ним) для заполнения себя данными. Когда приложение вызывает метод RowSet.execute, этот метод вызывает модуль чтения набора строк (rowset) для выполнения большей части работы. Реализации могут сильно различаться, но в общем случае модуль чтения устанавливает подключение к источнику данных, считывает данные из источника данных и заполняет набор строк (rowset) ими, а затем закрывает подключение. Модуль чтения также может обновить объект RowSetMetaData для набора строк (rowset). Внутреннее состояние набора строк (rowset) также обновляется либо модулем чтения, либо напрямую методом RowSet.execute.
    • RowSetWriter
      Отключённый объект RowSet , реализовавший интерфейс RowSetInternal, может вызвать метод своего модуля записи (объект RowSetWriter , связанный с ним) для записи изменений обратно в базовый источник данных. Реализации могут сильно различаться, но в общем случае модуль записи выполнит следующие действия:
      • Установить подключение к источнику данных
      • Проверить наличие конфликта, то есть, изменилось ли значение, изменённое в наборе строк (rowset), в источнике данных
      • Записать новые значения в источник данных, если конфликта нет
      • Закрыть подключение

Интерфейс RowSet может быть реализован различными способами, и любой может создать свою реализацию. Разработчикам рекомендуется использовать свою фантазию для создания новых способов использования наборов строк (rowset).

Спецификация пакета

  • Спецификация JDBC 4.3

Связанная документация

Книга Java Series, опубликованная Addison-Wesley Longman, содержит подробную информацию о классах и интерфейсах в пакете javax.sql:

  • “JDBC™ API Руководство и справочник, третье издание”
java.sql.rowset
Модуль Пакет Описание
javax.sql.rowset
Стандартные интерфейсы и базовые классы для реализаций JDBC RowSet.
Класс Описание
CommonDataSource
Интерфейс, определяющий методы, общие для DataSource, XADataSource и ConnectionPoolDataSource.
ConnectionEvent
Объект Event, предоставляющий информацию об источнике события, связанного с подключением.
ConnectionEventListener
Объект, регистрирующийся для получения уведомлений о событиях, генерируемых объектом PooledConnection.
ConnectionPoolDataSource
Фабрика для объектов PooledConnection.
DataSource
Фабрика для подключений к физическому источнику данных, представленному этим объектом DataSource.
PooledConnection
Объект, предоставляющий средства для управления пулом подключений.
PooledConnectionBuilder
Билдер, созданный из объекта ConnectionPoolDataSource, используемый для установления подключения к базе данных, которую представляет объект data source.
RowSet
Интерфейс, добавляющий поддержку модели компонентов JavaBeans к API JDBC.
RowSetEvent
Объект Event , генерируемый при возникновении события с объектом RowSet.
RowSetInternal
Интерфейс, реализуемый объектом RowSet для представления себя объектам RowSetReader или RowSetWriter.
RowSetListener
Интерфейс, который должен быть реализован компонентом, желающим получать уведомления о значительных событиях в жизни объекта RowSet.
RowSetMetaData
Объект, содержащий информацию о столбцах в объекте RowSet.
RowSetReader
Модуль, который вызывается отключённым объектом RowSet для заполнения себя строками данных.
RowSetWriter
Объект, реализующий интерфейс RowSetWriter, называемый записью.
StatementEvent
Сообщение StatementEvent отправляется всем StatementEventListener , которые были зарегистрированы с PooledConnection.
StatementEventListener
Объект, регистрирующийся для получения уведомлений о событиях, возникающих в PreparedStatements в пуле Statement.
XAConnection
Объект, обеспечивающий поддержку распределённых транзакций.
XAConnectionBuilder
Билдер, созданный из объекта XADataSource , используемый для установления подключения к базе данных, которую представляет объект data source.
XADataSource
Фабрика для объектов XAConnection , используемая внутри.

© 1993, 2023, 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/21/docs/api/java.sql/javax/sql/package-summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API