Spec-Zone.ru › OpenJDK 17

Пакет javax.sql

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

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

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

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

Использование объекта 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 взаимодействует с различными другими классами и интерфейсами за кулисами. Их можно сгруппировать в три категории.
END_OF_DOCUMENT_MARKER
  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 Series, опубликованная издательством Addison-Wesley Longman, содержит подробную информацию о классах и интерфейсах в пакете javax.sql:

  • “JDBC™API Tutorial and Reference, Третье издание”
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, 2021, 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/17/docs/api/java.sql/javax/sql/package-summary.html

Spec-Zone.ru

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