Contents | Prev | Next | JDBCTM Guide: Getting Started |
С помощью JDBC легко отсылать SQL-запросы почти ко всем реляционным БД. Другими словами, использование JDBC API избавляет от необходимости для каждой СУБД (Informix, Oracle и т.д.) писать свое приложение. Достаточно написать одну единственную программу, использующую JDBC API, и эта программа сможет отсылать SQL-запросы к требуемой БД. Кроме того, это проложение будет переносимо на различные платформы.
JDBC расширяет и без того богатую функциональность Java. Например, можно опубликовать в Интернет веб-страницу, содержащую апплет, связанный с БД на сервере. Еще один пример: организация с помощью JDBC может подключить всех сотрудников к одной БД, даже если мы имеем дело с конгломератом операционных систем на рабочих станциях сотрудников - Windows, Macintosh, UNIX
Connection con = DriverManager.getConnection ( "jdbc:odbc:wombat", "login", "password"); // Устанавливаем соединение Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); // Выполняем запрос while (rs.next()) { int x = getInt("a"); // получаем результат String s = getString("b"); float f = getFloat("c"); }
Дело в том, что лучше использовать так называемый мост JDBC-ODBC, который мы рассмотри чуть позже. На поставленный вопрос существцет несколько ответов:
В двухзвенной модели приложение или апплет на языке Java обращается непосредсвенно к БД. В этом случае JDBC-драйвер "умеет" общаться с соответствующей СУБД. SQL-запросы отсылаются в СУБД, а результаты отсылаются обратно к пользователю. БД может находиться на другой машине, с которой пользователь соединяется по сети. И пользовательская машина, и сервер БД работают в конфигурации клиент/сервер. В качестве сети может выступать Интранет, соединяя между собой работников корпорации, или Интернет:
В трехзвенной модели команды поступают в т.н. сервис среднего звена, который
отсылает SQL-выражения в БД. БД обрабатывает SQL, отсылая запросы в этот самый
сервис, который затем возвращает результат конечному пользователю. Трехзвенная
модель очень привлекательна тем, что может контролировать доступ и изменения,
вносимые в корпоративную БД. Другое достоинство такого подхода заключается в
том, что программист может реализовать свой собственный
предметно-ориентированный API, который транслируется средним звеном
низкоуровневые SQl-запросы. Кроме того, во многих случаях трехзвенная
архитектура может увеличить произведительность.
Вплоть до недавнего времени промежуточный слой было принято писать на таких высокопроизводительных языках как C или C++. Тем не менее с созданием компиляторов из байт-кода языка Java в эффективный машинный код реализация промежуточного звена на Java становится практически выгодной. Достоинства языка Java, которые в этом случае переносятся на промежуточное звено, - это гибкость, многопоточность и защищенность. JDBC в этой схеме предоставляет доступк БД из промежуточного звена, написанного на Java.
Один из способов, которым JDBC API решает эту проблему - это перенаправление всех SQL-запросов через драйвер СУБД "как есть". Это означает, что приложение вольно использовать все возможности SQL на полную катушку, но при этом рискуя получить сообщение об ошибке от некоторых СУБД. Фактически, запрос может и не быть SQL-запросом, а быть запросом, специфичным для данной СУБД (например, запросы к документам).
Второй способ разрешения проблем плохого соответствия языку SQL - это использование т.н. escape-конструкций в стиле ODBC, которые рассматриваются в разделе 4.1.5, "Escape-синтаксис SQL в объектах Statement.". Escape-синтаксис предлагает единый синтаксис для наиболее типичных разногласий в SQL. Например, существует escape-синтаксис для констант типа "дата" и вызовов хранимых процедур.
Для сложных приложений JDBC решает проблему соответствия SQL третьим
способом. Он предоставляет описательную информацию о СУБД с помощью интерфейса
DatabaseMetaData
таким образом, что приложения могут адаптироваться
под возможности различных СУБД.
Поскольку JDBC API используется в качестве основы для построения более высокоуровневых инструментов доступа к БД, то возникают также проблемы совместимости того, что надстроено сверху JDBC. Обозначение "JDBC COMPLIANTTM" ("Соответствует JDBCTM") было придумано с целью определить стандартные границы функциональности, на которую может положиться пользователь. Чтобы отвечать этому обозначению, драйвер JDBC должен поддерживать как минимум ANSI SQL-2 Entry Level (вводный уровень ANSI SQL-2. ANSI SQL-2 - это стандарт, принятый Американским Национальным Институтом Стандартов, 1992. Вводный уровень - это определенный список возможностей SQL). Разработчики драйверов должны убедиться, что их драйверы соответствуют этим стандартам, с помощью специального тестового набора, поставляемого вместе с JDBC API.
Знак "JDBC COMPLIANTTM" показывает, что реализация JDBC прошла тесты на совместимость, поставляемые компанией JavaSoft. Эти тесты совместимости проверяют на наличие всех классов и методов, декларированных в JDBC API, и проверяют так тщательно, насколько это возможно, что функциональность SQL Entry level достигнута. Эти тесты, конечно, не исчерпывающие, и JavaSoft в настоящее время не сертифицирует разработчиков драйверов. Тем не менее, в связи с быстрым распространением JDBC среди поставщиков баз данных и средств коммуникации и разработчиков приложений, JDBC стал стандартом доступа к БД из Java.
http://www.javasoft.com/products/jdbc
JDBC driver manager - это остов архитектуры JDBC. В версии JDK 1.1.x. он маленький и простой; его первичная функция - это присоединение Java-приложений к требуемому драйверу JDBC. После этого он выходит из игры.
Средства тестирования драйверов JDBC дают некоторую степень уверенности в том, что JDBC-драйверы будут работать с вашей программой. Только драйверы, прошедшие эти тесты, могут быть помечены как JDBC COMPLIANTTM.
Мост JDBC-ODBC позволяет использовать драйверы ODBC, как будто они были бы
JDBC-драйверами. Этот мост был разработан с целью повысить популярность JDBC и
дать разработчикам возможность работать с СУБД, которые пока не поддерживают
JDBC.
Следующая таблица показывает четыре типа драйверов и их свойства:
Категория драйверов | Полностью на JAVA? | Сетевой протокол |
---|---|---|
1 - Мост JDBC-OCBC | Нет | Непосредственно |
2 - "Родной" API в качестве основы | Нет | Непосредственно |
3 - JDBC-Net | Да | Требуется "коннектор" |
4 - "Родной" сетевой протокол | Да | Непосредственно |