Spec-Zone.ru › OpenJDK 24

Пакет 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 с помощью метода 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 Руководство и справочник, третье издание”
Since:
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
Интерфейс, добавляющий поддержку модели компонентов JavaBeans к API JDBC.
RowSetEvent
Объект Event, генерируемый при возникновении события с объектом RowSet.
RowSetInternal
Интерфейс, реализуемый объектом RowSet для представления себя объекту RowSetReader или RowSetWriter.
RowSetListener
Интерфейс, который должен быть реализован компонентом, который хочет получать уведомления о значимых событиях в жизни объекта RowSet.
RowSetMetaData
Объект, содержащий информацию о столбцах в объекте RowSet.
RowSetReader
Модуль, к которому обращается отключённый объект RowSet для заполнения себя строками данных.
RowSetWriter
Объект, реализующий интерфейс RowSetWriter, называемый писателем.
StatementEvent
Объект StatementEvent отправляется всем StatementEventListener, которые были зарегистрированы с объектом PooledConnection.
StatementEventListener
Объект, регистрируемый для получения уведомлений о событиях, происходящих на операциях PreparedStatement, находящихся в пуле Statement.
XAConnection
Объект, предоставляющий поддержку распределённых транзакций.
XAConnectionBuilder
Построитель, созданный из объекта XADataSource, используемый для установления соединения с базой данных, которую представляет объект data source.
XADataSource
Фабрика для объектов XAConnection, используемая внутри.

© 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://download.java.net/java/early_access/jdk24/docs/api/java.sql/javax/sql/package-summary.html

Spec-Zone.ru

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