Драйвер JDBC против моста - PullRequest
5 голосов
/ 11 ноября 2011

Я использовал JDBC в нескольких приложениях для запросов к базам данных Derby, PostgreSQL и MySQL.Я предполагаю, что задыхаюсь от некоторой базовой терминологии, пытаясь понять, что на самом деле происходит под капотом.Вот несколько терминов, которые я видел:

  • ODBC
  • Драйвер JDBC
  • Мост
  • Мост JDBC-ODBC

Для каждого из тех, кого я делал, я старался покопаться и получить представление о том, чем они являются, чем занимаются и как они связаны друг с другом.Я думаю, что я нахожусь на 70% пути, я просто не могу найти что-то (статьи, блоги, документы и т. Д.), Которые хорошо связывают все воедино и подтверждают мои подозрения.

Кажетсячто ODBC - это библиотека C (возможно, DLL?), которую программы могут использовать для связи с системами RDBM (такими как PostgreSQL и MySQL).Все запросы к этим системам входят и выходят из этой библиотеки в данной системе.

Мост JDBC-ODBC - это компонент Java, который содержит собственный код, который позволяет JDBC взаимодействовать с этой библиотекой ODBC в данной системе.

JDBC - это чистый Java API для запросов к системам RDBM.

Драйвер JDBC (такой как драйвер PostgreSQL-JDBC) - вот где у меня действительно возникают проблемы. Если все системы RDBM соответствуют стандартам RDBMS и могут взаимодействовать с библиотекой ODBC, то зачем JDBC нужны разные «драйверы» для каждого из них?

Что это за драйверы?Что они делают?Зачем они нужны?Также было бы очень полезно получить разъяснения по поводу любых других утверждений, которые я здесь сделал.Заранее спасибо!

Ответы [ 5 ]

7 голосов
/ 11 ноября 2011

Вы почти у цели.Хороший вопрос.

Что это за драйверы : Чистый драйвер JDBC - это драйвер, написанный на Java, для работы которого не требуется драйвер ODBC.Вы должны использовать драйверы ODBC (через мост JDBC-ODBC), когда у вас нет прямого драйвера JDBC для вашей базы данных (что крайне редко, поскольку большинство (если не все) баз данных поддерживают JDBC в настоящее время).

Преимущество чистого JDBC в том, что он не нуждается в ODBC.ODBC обычно сложно настроить, и для него требуется, чтобы в системе была установлена ​​собственная клиентская библиотека базы данных (например, Oracle OCI или Sybase CT Library).

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

Что они делают : то же самое, что ODBC.Стандартизированный Java API для доступа к реляционным базам данных.

Почему они необходимы : они необходимы, потому что с ними проще работать, вам просто нужны JAR-библиотека JDBC и ваше URL-соединение.В противоположность этому: собственная клиентская библиотека + драйвер ODBC + конфигурация JDBC-ODBC.Это также тот случай, когда каждая база данных имеет свой собственный сетевой протокол для выполнения запросов к ней и получения результатов назад.Таким образом, вам нужен один драйвер для каждого поставщика базы данных.Каждый из них реализует определенный протокол, необходимый для подключения к своему менеджеру реляционных баз данных.Если вы находитесь в мире, где все базы данных используют один и тот же язык SQL и один и тот же протокол связи, вам потребуется только один драйвер.Но это произойдет не скоро.

7 голосов
/ 11 ноября 2011

ODBC и JDBC эквивалентны. Они оба используют драйверы для преобразования вызовов ODBC (или JDBC) в собственные команды базы данных. ODBC старше и написан на C / C ++, а JDBC написан на Java. Когда вышел JDBC, для большинства БД не было драйверов JDBC, поэтому они создали драйвер JDBC-ODBC, чтобы люди могли использовать уже имеющиеся драйверы ODBC. Это редко используется в настоящее время, так как почти каждая БД имеет чистый драйвер Java JDBC

2 голосов
/ 11 ноября 2011

Ты прав; Вы очень близки к полному изображению!

JDBC и ODBC концептуально очень похожи. Они обе платформы для взаимодействия с базами данных. JDBC специфичен для Java, а ODBC - для Windows. Тем не менее, JDBC и ODBC на самом деле являются беззубыми API. В терминологии Java JDBC на самом деле представляет собой набор не реализованных интерфейсов . Хотя они определяют поведенческий контракт, они по своей сути не знают, как общаться с какой-либо конкретной базой данных. Вот сюда и приходят водители.

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

Как уже отмечали другие, мост JDBC / ODBC - всего лишь кусок клея, чтобы сделать код, написанный для JDBC, для работы с инфраструктурой ODBC. Как правило, это имеет смысл, только если вы точно знаете, что пишете исключительно на Java для Windows; ODBC специфичен для Windows, но JDBC (теоретически) кроссплатформенный.

2 голосов
/ 11 ноября 2011

То, что БД используют «стандартный» SQL (и это указывается в кавычках по причине), не означает, что БД использует тот же протокол более низкого уровня для связи. SQL - это просто синтаксис, но не протокол.

Протоколы для Postgres и, скажем, Oracle сильно отличаются друг от друга и предлагают разные функции, хотя они оба используют схожие функции SQL.

Сам SQL, хотя и является стандартным, имеет большие отклонения в реализации. Например, MySQL известен тем, что он менее совместим с SQL, чем другие БД. В то время как большая часть SQL, используемого сегодня, переносима между БД, есть много, чего нет.

JDBC и ODBC - родственные духи. Они предоставляют общий интерфейс, который ваше приложение может использовать для связи с RDBS. Они также предоставили общую модель для реализации поставщиками. Это драйверы.

Поставщики реализуют драйвер, позволяющий программе, совместимой с JDBC / ODBC, взаимодействовать со своей базой данных. Задача драйверов - преобразовать вызовы ODBC / JDBC в соответствующий SQL или другие вызовы управления для базы данных.

JDBC / ODBC Bridge - это драйвер JDBC, который взаимодействует с существующим драйвером ODBC. Это мерзость Не используйте это. Сегодня каждая база данных имеет драйверы JDBC. И придерживайтесь драйверов «типа 4» JDBC, если это вообще возможно, так как это родные Java, а не драйверы «типа 2», которые используют JNI для двоичного файла. Багги-драйверы типа 4 дают исключения, а багги-драйверы типа 2 - сбои JVM, которые приводят в действие ваш сервер приложений. Нет, спасибо.

1 голос
/ 11 ноября 2011
  • Jdbc - это java-способ подключения к базе данных с использованием dricers, написанных на java (начиная с JDBC4).
  • ODBC - это способ MS Windows для подключения к базе данных, эти драйверы обычно пишутся наC
  • Мост JDBC-ODBC является чем-то довольно старым, в первые дни java не было всех драйверов в версии JDBC, поэтому построить общий мост между JDBC и уже существующими драйверами ODBC.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...