JDBC - Типы драйверов
Что такое драйвер JDBC?
Драйверы JDBC реализуют определенные интерфейсы в JDBC API для взаимодействия с сервером базы данных.
Например, использование драйверов JDBC позволяет открывать соединения с базой данных и взаимодействовать с ними, отправляя команды SQL или базы данных, а затем получая результаты с помощью Java.
Пакет Java.sql , поставляемый с JDK, содержит различные классы с определенным их поведением, а их фактические реализации выполняются в сторонних драйверах. Сторонние поставщики реализуют интерфейс java.sql.Driver в своих драйверах базы данных.
Типы драйверов JDBC
Реализации драйвера JDBC различаются из-за большого разнообразия операционных систем и аппаратных платформ, на которых работает Java. Sun разделила типы реализации на четыре категории: типы 1, 2, 3 и 4, что объясняется ниже:
Тип 1: Драйвер моста JDBC-ODBC
В драйвере типа 1 мост JDBC используется для доступа к драйверам ODBC, установленным на каждом клиентском компьютере. Использование ODBC требует настройки в вашей системе имени источника данных (DSN), представляющего целевую базу данных.
Когда Java впервые появилась, это был полезный драйвер, потому что большинство баз данных поддерживало только доступ ODBC, но теперь этот тип драйвера рекомендуется только для экспериментального использования или когда нет другой альтернативы.
Мост JDBC-ODBC, поставляемый с JDK 1.2, является хорошим примером такого драйвера.
Тип 2: собственный API JDBC
В драйвере типа 2 вызовы JDBC API преобразуются в собственные вызовы C / C ++ API, которые уникальны для базы данных. Эти драйверы обычно предоставляются поставщиками баз данных и используются так же, как мост JDBC-ODBC. Драйвер конкретного поставщика должен быть установлен на каждом клиентском компьютере.
Если мы изменим базу данных, нам придется изменить собственный API, поскольку он специфичен для базы данных и в настоящее время в основном устарел, но вы можете получить некоторое увеличение скорости с помощью драйвера типа 2, поскольку он устраняет накладные расходы ODBC.
Драйвер Oracle Call Interface (OCI) является примером драйвера типа 2.
Тип 3: чистая Java JDBC-Net
В драйвере типа 3 для доступа к базам данных используется трехуровневый подход. Клиенты JDBC используют стандартные сетевые сокеты для связи с сервером приложений промежуточного слоя. Информация о сокете затем преобразуется сервером приложений промежуточного программного обеспечения в формат вызова, требуемый СУБД, и пересылается на сервер базы данных.
Этот тип драйвера является чрезвычайно гибким, поскольку он не требует установки кода на клиенте, а один драйвер может фактически обеспечить доступ к нескольким базам данных.
Вы можете думать о сервере приложений как о «прокси» JDBC, что означает, что он выполняет вызовы для клиентского приложения. В результате вам потребуется некоторое знание конфигурации сервера приложений, чтобы эффективно использовать этот тип драйвера.
Ваш сервер приложений может использовать драйверы типа 1, 2 или 4 для связи с базой данных, понимание нюансов может оказаться полезным.
Тип 4: 100% чистая Java
В драйвере типа 4 чистый драйвер на основе Java взаимодействует напрямую с базой данных поставщика через соединение сокета. Это драйвер с максимальной производительностью, доступный для базы данных, и обычно предоставляется самим поставщиком.
Этот вид драйверов чрезвычайно гибкий, вам не нужно устанавливать специальное программное обеспечение на клиент или сервер. Далее эти драйверы можно загружать динамически.
Драйвер MySQL Connector / J - это драйвер типа 4. Из-за проприетарного характера своих сетевых протоколов поставщики баз данных обычно поставляют драйверы типа 4.
Какой драйвер следует использовать?
Если вы обращаетесь к одному типу базы данных, например Oracle, Sybase или IBM, предпочтительный тип драйвера - 4.
Если ваше приложение Java обращается к нескольким типам баз данных одновременно, предпочтительным драйвером является тип 3.
Драйверы типа 2 полезны в ситуациях, когда драйвер типа 3 или 4 еще не доступен для вашей базы данных.
Драйвер типа 1 не считается драйвером уровня развертывания и обычно используется только для целей разработки и тестирования.