Архитектура JDBC

Любое современное приложение работает с разного рода данными. Получает их, обрабатывает, анализирует, хранит. Сами же эти данные тоже должны где-то хранится. Так вот, данные хранятся в специальных базах данных, управляемых разного рода СУБД (Системами Управления Базами Данных), а JDBC (Java DataBase Connectivity) – Java API для взаимодействия с СУБД. Из некоторых важных характеристик JDBC API стоит отметить, то что он абстрактный (абстрагирует разработчика от нюансов конкретной СУДБ). При этом сам разработчик может использовать специфические детали СУБД.

Как JDBC взаимодействует с базой данных?

После прочтения первого абзаца этот вопрос возникает естественным образом. Действительно, как? Ведь существует огромное количество баз данных (Oracle, PostgreSQL, MySQL и т.д. ), каждая из которых имеет свое собственное API, даже разные синтаксисы SQL! Для взаимодействия с базой данных необходимо использовать JDBC Driver, который предоставляется разработчиками самой базы данных. Т.е. при работе с Oracle, необходимо использовать драйвер предоставляемый Oracle. Конечно, это необязательно. Никто не запрещает вам сделать свой собственный JDBC Driver с Блэк-джэком и … ну вы поняли 🙂 Этот подход описывает один из паттернов “Банды 4-х” – Bridge. Будучи разработчиком вы врятли будите его часто использовать.

Как вы можете видеть JDBC Driver реализует нативный протокол, по которому происходит обращение к серверу базы данных. Причем мы работает с интерфейсом JDBC. Который уже работает с драйвером. Как раз это позволяет нам, быть устойчивыми к изменению СУБД. Поменять Oracle на PostgreSQL? Легко! Меняем только драйвер, реализацию не трогаем. Так же может быть ситуация, когда нам необходимо использовать несколько драйверов. Поэтому в JVM есть возможность централизовано хранить их. Для этого необходимо создать объект класса DriverManager( по сути Singletone) и зарегистрировать драйвера в менеджере.

DriverManager

Работа протекает таким образом, что разработчику обращается к драйверу с помощью метода getConnection() в параметрах которого передает “свойства” базы данных(DB_URL). Ниже подробнее рассмотрим этот метод. Далее DriverManager предоставляет экземпляр драйвера, который соответствует переданным свойствам. Отмети, что если в менеджере находится несколько одинаковых драйверов,  то возвращен будет только первый соотвествующий входным параметрам getConnection(). Для того, чтобы использовать DriverManager,  необходимо зарегистрировать  в нем ваши драйвера (только если вы работаете с JDBC 4, это произойдет автоматически). Для этого вам предоставляется на выбор несколько вариантов:

  • Загрузить класс драйвера с помощью Reflection Class.forName(MyDriver.class)
  • Использовать свойство JVM
  • Либо вызвать метод DriverManager.regiterDriver(new MyDriver())

Установка соединения с базой данных

Когда же мы, наконец установили драйвер, зарегистрировали его в DriverManager, мы устанавливаем соединение с базой данных. Как написано выше, для получения соединения нам необходимо вызвать у менеджера метод getConnection(). Метод реализован в трех вариантах.

DBURL – однозначно идентифицирует источник данных. Для разных баз данных имеет свой формат

props – свойства типичные для СУБД в формате пары “ключ-значение”

user, password – имя пользователя базы данных и пароль.

Так же после выполнения всех необходимых операций необходимо вызвать метод close(), чтобы закрыть соединение с базой данных. Хотя так говорить неправильно, исходя из представленной нами архитектуры. Метод close() вернет соединение обратно в DriverManager.

Исходя из вышесказанного приведем пример кода:

Типы JDBC драйверов

Всего существует 4 типа JDBC-драйверов.

JDBC-ODBC – класс этого драйвера включен в JRE. Его недостатком является то, что он может работать только из под Windows.

JDBC-Native – в отличии от ODBC может использоваться на любой операционной системе. Naitve-драйвер предоставляется разработчиками БД. Для использования его необходимо сконфигурировать под выбранную ОС, из-за этого возникают проблемы с переносимостью.

JDBC-Net – реализует трехуровневую систему доступа к БД как можно видеть из рисунка.

Pure Java-driver – полностью написан на Java, за счет этого требуется гораздо меньше затрат в случае переносимости.

Резюме

В настоящее время глубокое знание  JDBC не часто требуется работодателями. Популярными решения на базе JDBC являются ORM решения, такие как Hibernate. Однако, например, в проектах, связанных с миграцией большого количества данных из разнородных источников, ORM-решения будут бессильны. В общем, ORM- более высокий уровень абстракции по сравнению с JDBC.

Оставить комментарий:

Ваш email не будет опубликован.