div.main {margin-left: 20pt; margin-right: 20pt} Доступ к базам данных из Java-программ и проблемы русификации
С. Б. Дунаев
Введение
Разумеется, что организовать доступ к базам данных из современного
языка программирования в наше время не представляет никакой сложности.
Более того, и сами языки программирования более всего оцениваются
разработчиками по типу и возможностям заложенных в них средств доступа к
базам данных, удобству и полноте интерфейсов. В этом смысле Java не
представляет исключения. Уже в версии JDK1.1 появился пакет классов
java.sql, обеспечивающий больщинство функций, известных к тому времени
разработчикам ODBC-приложений. В этом пакете содержится ряд замечательных
классов, например: java.sql.CallableStatement, который обеспечивает
выполнение на Java хранимых процедур; java.sql.DatabaseMetaData, который
исследует базу данных на предмет ее реляционной полноты и целостности с
получением самых разнообразных данных о типах и содержимом таблиц,
колонок, индексов, ключей и т.д.; наконец, - java.sql.ResultSetMetaData, с
помощью которого можно выводить в удобном виде всю необходимую информацию
из таблиц базы данных или печатать сами метаданные в виде названий таблиц
и колонок.
Однако, коренное отличие Java от других традиционных языков
программирования заключается в том, что одни и те же функции доступа к
базам данных, с помощью универсальности и кроссплатформенности Java, можно
организовать чрезвычайно гибко, используя все преимущества современных
объектно-ориентированных технологий, WWW и Intranet/Internet. Рассмотрим
по порядку все варианты использования Java-программ при взаимодействии с
базами данных.
1. Java-программы и апплеты с интерфейсом JDBC-ODBC
JDBC (Java Database Connectivity) является не протоколом, а интерфейсом
и основан на спецификациях SAG CLI (SQL Access Group Call Level Interface
- интерфейс уровня вызова группы доступа SQL).
Сам по себе JDBC работать не может и использует основные абстракции и
методы ODBC. Хотя в стандарте JDBC API и предусмотрена возможность работы
не только через ODBC, а и через использование прямых линков к базам данных
по двух- или трех-звенной схеме (см. Рис.1), эту схему используют гораздо
реже, чем повсеместно используемый JDBC-ODBC-Bridge занимающий центральное
место в общей схеме взаимодействия интерфейсов (см. Рис. 2)
Рис.
1. Непосредственный доступ к базе данных по 3-х-звенной схеме.
Рис. 2. Схема взаимодействия интерфейсов.
Даже беглого взгляда на Рис. 2 вполне достаточно, чтобы понять - общая
схема взаимодействия интерфейсов в Java удивительным образом напоминает
столь всем знакомую схему ODBC с ее гениальным изобретением
драйвер-менеджера к различным СУБД и единого универсального
пользовательского интерфейса. JDBC Driver Manager - это основной ствол
JDBC-архитектуры. Его первичные функции очень просты - соединить
Java-программу и соответствующий JDBC драйвер и затем выйти из игры.
Естественно, что ODBC был взят в качестве основы JDBC из-за его
популярности среди независимых поставщиков программного обеспечения и
пользователей. Но тогда возникает законный вопрос - а зачем вообще нужен
JDBC и не легче ли было организовать интерфейсный доступ к ODBC-драйверам
непосредственно из Java? Ответом на этот вопрос может быть только
однозначное нет. Путь через JDBC-ODBC-Bridge, как ни странно, может
оказаться гораздо короче.
1. ODBC нельзя использовать непосредственно из Java, поскольку он
основан на C-интерфейсе. Вызов из Java C-кода нарушает целостную концепцию
Java, пробивает брешь в защите и делает программу трудно-переносимой.
2. Перенос ODBC C-API в Java-API нежелателен. К примеру, Java не имеет
указателей, в то время как в ODBC они используются.
3. ODBC слишком сложен для понимания. В нем смешаны простые и сложные
вещи, причем сложные опции иногда применяются для самых простых
запросов.
4. Java-API необходим, чтобы добиться абсолютно чистых Java решений.
Когда ODBC используется, то ODBC-драйвер и ODBC менеджер должны быть
инсталлированы на каждой клиентской машине. В то же время, JDBC драйвер
написан полностью на Java и может быть легко переносим на любые платформы
от сетевых компьютеров до мэйнфреймов.
JDBC API - это естественный Java-интерфейс к базовым SQL абстракциям и,
восприняв дух и основные абстракции концепции ODBC, он реализован,
все-таки, как настоящий Java-интерфейс, согласующийся с остальными частями
системы Java.
В отличие от интерфейса ODBC, JDBC организован намного проще. Главной
его частью является драйвер, поставляемый фирмой JavaSoft для доступа из
JDBC к источникам данных. Этот драйвер является самым верхним в иерархии
классов JDBC и называется DriverManager. Согласно, установившимся правилам
Internet, база данных и средства ее обслуживания идентифируются при помощи
URL. jdbc::
где под понимается имя конкретного драйвера, или некоего
механизма установления соединения с базой данных, например, ODBC. В случае
применения ODBC, в URL-строку подставляется именно эта аббревиатура, а в
качестве используется обычный DSN (Data Source Name), т.е. имя
ODBC-источника из ODBC.INI файла. Например: jdbc:odbc:dBase
В некоторых случаях вместо ODBC может быть использовано имя прямого
сетевого сервиса к базе данных,
например: jdbc:dcenaming:accounts-payable, или jdbc:dbnet://ultra1:1789/state
В последнем случае часть URL //ultra1:1789/state представляет собой
и описывает имя хоста, порт и соответствующий идентификатор для
доступа к соответствующей базе данных.
|