Spec-Zone.ru › OpenJDK 25

Пакет 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 для PreparedStatements, что можно определить, вызвав метод DatabaseMetaData.supportsStatementPooling, он зарегистрируется как объект StatementEventListener у нового объекта PooledConnection. Когда PreparedStatement закрывается или возникает ошибка, менеджер пула соединений (выступающий в роли слушателя) получает уведомление, содержащее объект 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.addRowSetListener.

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

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

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

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

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

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

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

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

В книге серии Java, опубликованной Addison-Wesley Longman, подробно описаны классы и интерфейсы пакета javax.sql:

  • «Руководство и справочник по API JDBC™, третье издание»
Начиная с версии:
1.4
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
Интерфейс, добавляющий в API JDBC поддержку компонентной модели JavaBeans.
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, используемая внутри системы.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее филиалов в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее филиалы, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.sql/javax/sql/package-summary.html

Spec-Zone.ru

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