Введение

Программный компонент, обеспечивающий взаимодействие Java-приложения с базой данных.

Драйвер JDBC – это программный компонент, обеспечивающий взаимодействие Java-приложения с базой данных. Драйверы JDBC аналогичны драйверам ODBC, провайдерам данных ADO.NET и провайдерам OLE DB. Для подключения к отдельным базам данных JDBC (Java Database Connectivity API) требует драйвер для каждой базы данных. Драйвер JDBC устанавливает соединение с базой данных и реализует протокол для передачи запросов и результатов между клиентом и базой данных. Драйверы технологии JDBC относятся к одной из четырех категорий:

JDBC ODBC-мост
Драйвер на основе нативного API
Драйвер сетевого протокола (промежуточное ПО)
Драйвер протокола базы данных (чистый Java-драйвер) или тонкий драйвер.

Драйвер типа 1 Мост JDBC-ODBC

Драйвер JDBC типа 1, также известный как мост JDBC ODBC, является реализацией драйвера dbase, использующей драйвер ODBC для подключения к базе данных. Драйвер преобразует вызовы методов JDBC в вызовы функций ODBC. Драйвер зависим от платформы, поскольку использует ODBC, который, в свою очередь, зависит от нативных библиотек базовой операционной системы, на которой работает JVM. Кроме того, использование этого драйвера влечет за собой дополнительные зависимости при установке; например, ODBC должен быть установлен на компьютере, где установлен драйвер, и база данных должна поддерживать драйвер ODBC. Использование этого драйвера не рекомендуется, если доступна альтернатива в виде чистого Java-драйвера. Другим следствием является то, что любое приложение, использующее драйвер типа 1, не является переносимым из-за привязки драйвера к платформе. Эта технология не подходит для сред с высокой пропускной способностью транзакций. Драйверы типа 1 также не поддерживают полный набор команд Java и ограничены функциональностью драйвера ODBC. Компания Sun (ныне Oracle) предоставила драйвер JDBC ODBC Bridge: sun.jdbc.odbc.JdbcOdbcDriver. Этот драйвер написан на нативном коде, а не на Java, и является закрытым исходным кодом. Мост JDBC ODBC от Sun/Oracle был удален в Java 8 (доступны драйверы других поставщиков). Если драйвер написан таким образом, что его загрузка вызывает создание экземпляра и последующий вызов DriverManager.registerDriver с этим экземпляром в качестве параметра, то он будет находиться в списке драйверов DriverManager и доступен для создания соединения. Иногда может оказаться, что более одного JDBC-драйвера способен подключиться к заданному URL. Например, при подключении к удаленной базе данных можно использовать драйвер JDBC ODBC Bridge, драйвер JDBC к общему сетевому протоколу или драйвер, предоставляемый поставщиком базы данных. В таких случаях порядок проверки драйверов имеет значение, поскольку DriverManager будет использовать первый драйвер, который сможет успешно подключиться к заданному URL. Сначала DriverManager пытается использовать каждый драйвер в порядке его регистрации. (Драйверы, перечисленные в jdbc.drivers, всегда регистрируются первыми.) Он пропускает любые драйверы, содержащие ненадежный код, если они не были загружены из того же источника, что и код, пытающийся открыть соединение. DriverManager тестирует драйверы, вызывая метод Driver.connect для каждого из них по очереди, передавая им URL, который пользователь первоначально передал методу DriverManager.getConnection. Первый драйвер, распознающий URL, устанавливает соединение.

Преимущества

Почти к любой базе данных, для которой установлен драйвер ODBC, можно получить доступ и извлечь данные.

Недостатки

Снижение производительности, так как вызовы должны проходить через JDBC-мост (Java Database Connectivity) к драйверу ODBC (Open Database Connectivity), а затем к нативному интерфейсу подключения к базе данных (что может быть медленнее, чем при использовании других типов драйверов). Драйвер ODBC необходимо установить на клиентской машине. Не подходит для апплетов, поскольку для работы требуется установка драйвера ODBC на стороне клиента. Специфические драйверы ODBC не всегда доступны для всех платформ, что ограничивает переносимость данного драйвера. Не поддерживается JDK 1.8 (Java 8).

Драйвер типа 2 Драйвер API-нативный

Драйвер JDBC типа 2, также известный как драйвер Native API, – это реализация драйвера базы данных, использующая клиентские библиотеки этой базы данных. Драйвер преобразует вызовы методов JDBC в нативные вызовы API базы данных. Например, драйвер Oracle OCI является драйвером типа 2.

Преимущества

Поскольку реализации JDBC ODBC-моста нет, он может быть значительно быстрее драйвера типа 1.

Недостатки

Клиентская библиотека поставщика должна быть установлена на клиентской машине. Не для всех баз данных существует клиентская библиотека. Этот драйвер зависит от платформы. Этот драйвер поддерживает все Java-приложения, за исключением апплетов.

Драйвер типа 3 Драйвер сетевого протокола (диспетчер промежуточного программного обеспечения)

Драйвер JDBC типа 3, также известный как драйвер Pure Java для промежуточного программного обеспечения баз данных, является реализацией драйвера базы данных, использующей промежуточный уровень между вызывающей программой и базой данных. Этот промежуточный уровень (сервер приложений) преобразует вызовы JDBC напрямую или косвенно в протокол базы данных, специфичный для конкретного поставщика. Это отличается от драйвера типа 4 тем, что логика преобразования протокола находится не на стороне клиента, а на промежуточном уровне. Как и драйверы типа 4, драйвер типа 3 полностью написан на Java. Один и тот же клиентский JDBC-драйвер может использоваться для работы с несколькими базами данных, в зависимости от количества баз данных, которые настроены для поддержки в промежуточном программном обеспечении. Драйвер типа 3 является платформенно-независимым, поскольку различия, связанные с платформой, обрабатываются промежуточным программным обеспечением. Кроме того, использование промежуточного программного обеспечения обеспечивает дополнительные преимущества в плане безопасности и доступа через брандмауэр.

Функции

Отправляет вызовы JDBC API на сетевой сервер промежуточного уровня, который преобразует эти вызовы в сетевой протокол, специфичный для конкретной СУБД. Преобразованные вызовы затем направляются в целевую СУБД. Использует трехзвенную архитектуру связи. Может взаимодействовать с несколькими базами данных и не привязан к конкретному поставщику. JDBC Client драйвер, написанный на Java, взаимодействует с сетевым сервером промежуточного ПО, используя протокол, независимый от базы данных, после чего этот сервер преобразует запрос в команды для соответствующей СУБД. Таким образом, связь между клиентским драйвером и промежуточным ПО не зависит от используемой базы данных.

Преимущества

Поскольку взаимодействие между клиентом и сервером промежуточного ПО не зависит от используемой базы данных, на стороне клиента не требуется библиотека поставщика базы данных. Клиенту не нужно вносить изменения при переходе на новую базу данных. Сервер промежуточного ПО (который может быть полноценным J2EE-сервером приложений) может предоставлять стандартные сервисы промежуточного ПО, такие как кэширование (соединений, результатов запросов и т.п.), балансировка нагрузки, ведение журналов и аудит. Один драйвер может работать с любой базой данных, если она поддерживается промежуточным ПО. Например: IDA Server.

Недостатки

Требуется специфическое кодирование для конкретной базы данных, которое необходимо реализовать на среднем уровне. Добавленный слой промежуточного программного обеспечения может вызвать дополнительную задержку, но обычно это компенсируется использованием более производительных сервисов промежуточного ПО.

Драйвер типа 4 Драйвер базы данных-протокола/тонкий драйвер (чистый драйвер Java)

Драйвер JDBC типа 4, также известный как чистый Java-драйвер прямого подключения к базе данных, является реализацией драйвера базы данных, который преобразует вызовы JDBC непосредственно в протокол базы данных, специфичный для конкретного поставщика. Написанные полностью на Java, драйверы типа 4 являются платформенно-независимыми. Они устанавливаются внутри виртуальной машины Java на стороне клиента. Это обеспечивает более высокую производительность, чем у драйверов типа 1 и типа 2, поскольку отсутствует накладной расход, связанный с преобразованием вызовов в ODBC или вызовы API базы данных. В отличие от драйверов типа 3, для работы не требуется дополнительное программное обеспечение. Поскольку протокол базы данных специфичен для поставщика, клиенту JDBC требуются отдельные драйверы, как правило, предоставляемые поставщиком, для подключения к базам данных различных типов.

Преимущества

Полностью реализован на Java для обеспечения платформенной независимости. Эти драйверы не преобразуют запросы в промежуточный формат (например, ODBC). Клиентское приложение подключается напрямую к серверу базы данных. Отсутствие слоев перевода или промежуточного программного обеспечения повышает производительность. JVM управляет всеми аспектами соединения приложения с базой данных, что облегчает отладку.

Недостатки

Драйверы зависят от конкретной базы данных, так как различные производители баз данных используют существенно отличающиеся (и как правило, проприетарные) сетевые протоколы.