Пакет javax.sql
Предоставляет API для доступа к источникам данных и обработки данных на стороне сервера из языка программирования JavaTM.
См.: Описание
| Интерфейс | Описание |
|---|---|
| CommonDataSource | Интерфейс, определяющий методы, общие для |
| ConnectionEventListener | Объект, который регистрируется для получения уведомлений о событиях, генерируемых объектом |
| ConnectionPoolDataSource | Фабрика для объектов |
| DataSource | Фабрика для подключений к физическому источнику данных, который представляет этот объект |
| PooledConnection | Объект, предоставляющий средства для управления пулом подключений. |
| RowSet | Интерфейс, добавляющий поддержку модели компонентов JavaBeans™ в API JDBC. |
| RowSetInternal | Интерфейс, который реализует объект |
| RowSetListener | Интерфейс, который должен быть реализован компонентом, желающим получать уведомления о значимых событиях в жизни объекта |
| RowSetMetaData | Объект, содержащий информацию о столбцах в объекте |
| RowSetReader | Средство, которое использует объект |
| RowSetWriter | Объект, реализующий интерфейс |
| StatementEventListener | Объект, регистрируемый для получения уведомлений о событиях, происходящих в PreparedStatements, находящихся в пуле Statement. |
| XAConnection | Объект, обеспечивающий поддержку распределенных транзакций. |
| XADataSource | Фабрика для объектов |
| Класс | Описание |
|---|---|
| ConnectionEvent | Объект |
| RowSetEvent | Объект |
| StatementEvent | Объект |
Описание пакета javax.sql
Предоставляет API для доступа к источникам данных и обработки данных на стороне сервера из языка программирования JavaTM. Этот пакет дополняет пакет java.sql и, начиная с версии 1.4, включен в Java Platform, Standard Edition (Java SETM). Он остаётся неотъемлемой частью Java Platform, Enterprise Edition (Java EETM).
Пакет javax.sql предоставляет следующее:
- Интерфейс
DataSourceв качестве альтернативыDriverManagerдля установления соединения с источником данных - Пулы подключений и пулы PreparedStatements
- Распределённые транзакции
- Наборы строк (Rowsets)
Приложения используют API DataSource и RowSet напрямую, но API пулов подключений и распределённых транзакций используются внутри инфраструктурой среднего уровня.
Использование объекта DataSource для создания подключения
Пакет javax.sql предоставляет предпочтительный способ создания подключения к источнику данных. Класс DriverManager, первоначальный механизм, по-прежнему действителен, и код, использующий его, будет продолжать работать. Однако, новый механизм, использующий объект DataSource, предпочтительнее, поскольку он предлагает множество преимуществ по сравнению с механизмом DriverManager. Вот основные преимущества использования объекта DataSource для создания подключения:
- Изменения свойств источника данных можно внести без изменения кода приложения, что означает, что нет необходимости вносить изменения в код приложения, когда что-то меняется в источнике данных или драйвере.
- Пулы подключений и PreparedStatements, а также распределённые транзакции доступны через объект
DataSource, реализованный для работы с инфраструктурой среднего уровня. Подключения, созданные черезDriverManager, не имеют возможностей пулов подключений и PreparedStatements или распределённых транзакций.
Поставщики драйверов предоставляют реализации интерфейса DataSource. Конкретный объект DataSource представляет конкретный физический источник данных, и каждое соединение, созданное объектом DataSource, является соединением с этим физическим источником данных.
Логическое имя источника данных регистрируется в службе именования, использующей API Java Naming and Directory InterfaceTM (JNDI), обычно системным администратором. Приложение может получить нужный объект DataSource через поиск по зарегистрированному логическому имени. Затем приложение может использовать объект DataSource для создания подключения к физическому источнику данных, который он представляет.
Объект DataSource может быть реализован для работы с инфраструктурой среднего уровня, так что создаваемые им подключения будут использоваться в пуле для повторного использования. Приложение, использующее такую реализацию объекта DataSource, автоматически получит подключение, участвующее в пуле подключений. Объект DataSource также может быть реализован для работы с инфраструктурой среднего уровня, чтобы создаваемые им подключения могли использоваться для распределённых транзакций без специального кодирования.
Пулы подключений и пулы PreparedStatements
Подключения, созданные через объектDataSource, реализованный для работы с менеджером пула подключений среднего уровня, будут участвовать в пуле подключений. Это может значительно улучшить производительность, поскольку создание новых подключений очень дорогостоящее. Пулы подключений позволяют использовать и повторно использовать подключение, значительно сокращая количество создаваемых новых подключений. Пулы подключений полностью прозрачны. Они автоматически выполняются на среднем уровне конфигурации Java EE, поэтому с точки зрения приложения изменения кода не требуются. Приложение просто использует метод DataSource.getConnection для получения подключение из пула и использует его таким же образом, как и любой объект Connection.
Классы и интерфейсы, используемые для пулов подключений:
-
ConnectionPoolDataSource -
PooledConnection -
ConnectionEvent -
ConnectionEventListener -
StatementEvent -
StatementEventListener
ConnectionPoolDataSource вызывается для создания объекта PooledConnection, менеджер пула подключений зарегистрируется как объект ConnectionEventListener с новым объектом PooledConnection. При закрытии подключения или возникновении ошибки менеджер пула подключений (будучи слушателем) получает уведомление, которое включает в себя объект ConnectionEvent. Если менеджер пула подключений поддерживает пулы PreparedStatements, для 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, который менеджер транзакций использует для управления подключением.
Наборы строк (Rowsets)
ИнтерфейсRowSet работает с различными другими классами и интерфейсами в фоновом режиме. Их можно сгруппировать в три категории. - Уведомление об событии
-
RowSetListener
ОбъектRowSetявляется компонентом JavaBeansTM, так как он имеет свойства и участвует в механизме уведомления о событиях JavaBeans. ИнтерфейсRowSetListenerреализуется компонентом, который хочет получать уведомления о событиях, происходящих в определенном объектеRowSet. Такой компонент регистрируется как слушатель в наборе строк (rowset) с помощью методаRowSet.addRowSetListener.Когда объект
RowSetизменяет одну из своих строк, все строки или перемещает свой курсор, он также уведомляет каждого зарегистрированного слушателя. Слушатель реагирует, выполняя свою реализацию метода уведомления, вызываемого на нём. -
RowSetEvent
В рамках внутреннего процесса уведомления объектRowSetсоздаёт экземплярRowSetEventи передаёт его слушателю. Слушатель может использовать этот объектRowSetEventдля определения набора строк (rowset), в котором произошло событие.
-
- Метаданные
-
RowSetMetaData
Этот интерфейс, производный от интерфейсаResultSetMetaData, предоставляет информацию о столбцах в объектеRowSet. Приложение может использовать методыRowSetMetaData, чтобы узнать, сколько столбцов содержит набор строк (rowset) и какой тип данных может содержать каждый столбец.Интерфейс
RowSetMetaDataпредоставляет методы для установки информации о столбцах, но приложение обычно не использует эти методы. Когда приложение вызывает методRowSetexecute, объектRowSetбудет содержать новый набор строк, а его объектRowSetMetaDataбудет внутренне обновлён, чтобы содержать информацию о новых столбцах.
-
- Модуль чтения/записи
ОбъектRowSet, реализующий интерфейсRowSetInternal, может обратиться к объектуRowSetReader, связанному с ним, чтобы заполнить себя данными. Он также может обратиться к объектуRowSetWriter, связанному с ним, чтобы записать любые изменения в свои строки обратно в источник данных, из которого он изначально получил строки. Набор строк (rowset), который остаётся подключённым к источнику данных, не нуждается в использовании средства чтения и записи, так как он может просто напрямую работать с источником данных.-
RowSetInternal
Реализуя интерфейсRowSetInternal, объектRowSetполучает доступ к своему внутреннему состоянию и может обратиться к своему средству чтения и записи. Набор строк (rowset) отслеживает значения в своих текущих строках и значения, которые непосредственно предшествовали текущим, которые называются исходными значениями. Набор строк (rowset) также отслеживает (1) параметры, установленные для его команды, и (2) подключение, переданное ему, если таковое имеется. Набор строк использует методыRowSetInternalв фоновом режиме, чтобы получить доступ к этой информации. Приложение обычно не вызывает эти методы напрямую. -
RowSetReader
Отключённый объектRowSet, реализовавший интерфейсRowSetInternal, может обратиться к своему средству чтения (объектRowSetReader, связанный с ним), чтобы заполнить себя данными. Когда приложение вызывает методRowSet.execute, этот метод обращается к средству чтения набора строк (rowset), чтобы выполнить большую часть работы. Реализации могут сильно различаться, но в целом средство чтения устанавливает подключение к источнику данных, считывает данные из источника данных и заполняет набор строк (rowset) ими и закрывает подключение. Средство чтения также может обновить объектRowSetMetaDataдля своего набора строк. Внутреннее состояние набора строк также обновляется, либо средством чтения, либо непосредственно методомRowSet.execute. -
RowSetWriter
Отключённый объектRowSet, реализовавший интерфейсRowSetInternal, может обратиться к своему средству записи (объектRowSetWriter, связанный с ним), чтобы записать изменения обратно в базовый источник данных. Реализации могут значительно различаться, но в целом средство записи выполнит следующие действия:- Установить подключение к источнику данных
- Проверить наличие конфликта, то есть, изменилось ли значение, изменённое в наборе строк (rowset), в источнике данных
- Записать новые значения в источник данных, если конфликта нет
- Закрыть подключение
-
Интерфейс RowSet может быть реализован различными способами, и любой может написать реализацию. Разработчикам рекомендуется использовать свою фантазию, разрабатывая новые способы использования наборов строк (rowset).
ВАЖНОЕ ПРИМЕЧАНИЕ: Код, использующий API, помеченный "Since 1.6", должен выполняться с помощью драйвера JDBC, который реализует API JDBC 4.0. Необходимо проверить документацию своего драйвера, чтобы убедиться, что он реализует необходимые функции.
- Since:
- 1.4
© 1993, 2020, 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.