Обработчик баз данных на языке Java

Автор: Черныш И.И., руководитель Зеленева И.Я.


Источник: Сборник научных конференций ДонНТУ 2009 г.


Введение

Разумеется, что организовать доступ к базам данных из современного языка программирования в наше время не представляет никакой сложности. Более того, и сами языки программирования более всего оцениваются разработчиками по типу и возможностям заложенных в них средств доступа к базам данных, удобству и полноте интерфейсов. В этом смысле Java не представляет исключения. Уже в версии JDK1.1 появился пакет классов java.sql, обеспечивающий больщинство функций, известных к тому времени разработчикам ODBC-приложений. В этом пакете содержится ряд замечательных классов, например: java.sql.CallableStatement, который обеспечивает выполнение на Java хранимых процедур; java.sql.DatabaseMetaData, который исследует базу данных на предмет ее реляционной полноты и целостности с получением самых разнообразных данных о типах и содержимом таблиц, колонок, индексов, ключей и т.д.; наконец, - java.sql.ResultSetMetaData, с помощью которого можно выводить в удобном виде всю необходимую информацию из таблиц базы данных или печатать сами метаданные в виде названий таблиц и колонок.

Однако, коренное отличие Java от других традиционных языков программирования заключается в том, что одни и те же функции доступа к базам данных, с помощью универсальности и кроссплатформенности Java, можно организовать чрезвычайно гибко, используя все преимущества современных объектно-ориентированных технологий, WWW и Intranet/Internet.

Еще одно преимущество - это невысокая стоимость средств, работающих с Java, в сравнении со стоимостью аналогичных средств других от компаний. А если к тому же учесть свойство кросплатформеннсти Java – технологий, то получаем в итоге недорогой и качественній продукт.

1. Анилиз основных характеристик языка Java

1.1 Основные особенности языка

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор, но с тем отличием, что байтовый код, в отличие от текста, обрабатывается значительно быстрее.

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

Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований:

- применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,

- широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,

- аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификация общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft.

1.2 Java и Microsoft

Компанией Microsoft была разработана собственная реализация JVM (MSJVM), включавшаяся в состав различных операционных систем, начиная с Windows 95. MSJVM была близка к спецификации Sun Microsystems v.1.1.3, но не соответствовала ей по ряду принципиальных характеристик (в частности, по отсутствию поддержки программного интерфейса вызова удаленных методов (RMI) и JNI и по наличию нестандартных расширений). Впоследствии это явилось поводом для судебных исков со стороны Sun Microsystems к Microsoft. Суд принял сторону компании Sun Microsystems. В конечном счёте между двумя компаниями была достигнута договорённость о возможности продления срока официальной поддержки пользователей нестандартной Microsoft JVM до конца 2007 года, но не более. В настоящее время компанией Microsoft для платформы .NET предлагается Java-подобный язык J#, не соответствующий официальной спецификации языка Java.

1.3 Применения платформы Java

Следующие успешные проекты реализованы с привлечением Java (J2EE) технологий: Amazon, eBay, Yandex (неоднозначная информация в отношении Java), LinkedIn, Yahoo!.

Следующие компании в основном фокусируются на Java (J2EE) технологиях, а не на .NET, хотя имеют дело также и с последними: SAP, IBM, Oracle. В частности, СУБД Oracle включает JVM как свою составную часть, обеспечивающую возможность непосредственного программирования СУБД на языке Java, включая, например, хранимые процедуры.

1.4 Основные возможности

- автоматическое управление памятью

- расширенные возможности обработки исключительных ситуаций;

- богатый набор средств фильтрации ввода/вывода;

- набор стандартных коллекций, таких как массив, список, стек и т. п.;

- наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI);

- наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;

- встроенные в язык средства создания многопоточных приложений;

- унифицированный доступ к базам данных:

- на уровне отдельных SQL-запросов — на основе JDBC, SQLJ;

- на уровне концепции объектов, обладающих способностью к хранению в базе данных — на основе Java Data Objects (англ.) и Java Persistence API (англ.).

- поддержка шаблонов (начиная с версии 1.5).

1.5 Java и базы данных

Большинство информации хранится не в файлах, а в базах данных. Приложение должно уметь связываться с базой данных для получения из нее ни формации или для помещения информации в базу данных. Дело здесь осложняется тем, что СУБД (системы управления базами данных) сильно отличаются друг от друга и совершенно по-разному управляют базами данных. Каждая СУБД предоставляет свой набор функций для доступа к базам данных, и приходится для каждой СУБД писать свое приложение. Но что делать при работе по сети, когда неизвестно, какая СУБД управляет базой на сервере?

Выход был найден корпорацией Microsoft, создавшей набор интерфейсом ODBC (Open Database Connectivity) для связи с базами данных, оформленных как прототипы функций языка С. Эти прототипы одинаковы для любой СУБД, они просто описывают набор действий с таблицами базы данных. В приложение, обращающееся к базе данных, записываются вызовы функций ODBC. Для каждой системы управления базами данных разрабатывается так называемый драйвер ODBC, реализующий эти функции для конкретной СУБД. Драйвер просматривает приложение, находит обращения к базе данных, передает их СУБД, получает от нее результаты и подставляет их в приложение. Идея оказалась очень удачной, и использование ODBC для работы с базами данных стало общепринятым.

SUN подхватила эту идею и разработала набор интерфейсов и классов названный JDBC, предназначенный для работы с базами данных. Эти интерфейсы и классы составили пакет java.sql, входящий в J2SDK Standard и его расширение javax.sql, входящее в J2SDK Enterprise Edition.

Кроме классов с методами доступа к базам данных для каждой СУБД необходим драйвер JDBC - промежуточная программа, реализующая методы JDBC.


Java представляет собой язык программирования для нового поколения прикладных информационных систем, который примечателен прежде всего благодаря повышению эффективности процесса разработки приложений. Компания Sybase убеждена, что язык Java позволит повысить эффективность разработки серверных приложений, а также расширить возможности серверов баз данных. <

Это убеждение основывается на следующих причинах:

- Этот язык начинает широко применяться при разработке прикладных систем. Для уменьшения различий между разработкой клиентских и серверных приложений необходимо использовать единый язык программирования.

- Этот язык имеет встроенные средства контроля безопасности исполнения программ. Язык, используемый в критически важных приложениях, которые обычно основываются на системах управления базами данных, должен иметь встроенную защиту для самой СУБД. Язык Java такую защиту обеспечивает.

- Это объектно-ориентированный язык. Язык, который предназначен стать основой для новых объектных типов данных, должен быть объектно-ориенти - рованным. Java изначально проектировался как объектно-ориентированный язык.

Два направления использования языка Java в СУБД:

- В качестве языка программирования серверной прикладной логики, развивающий возможности традиционных SQL-ориентированных хранимых процедур.

- В качестве средства описания и хранения объектных типов данных в СУБД.

1.5.1. Использование Java для программирования СУБД

Современные сервера баз данных применяют SQL для достижения двух задач: доступа к данным и программирования прикладных алгоритмов. Язык SQL продолжает оставаться прекрасным языком для управления данными, однако хранимые процедуры, являющиеся расширениями языка SQL и предназначенные для программирования и хранения внутри сервера прикладного кода, имеют очевидные слабые места.

Хранимые процедуры на SQL имеют очень ограниченный набор средств разработки и отладки, их невозможно вынести из сервера СУБД, а кроме того, в них отсутствует множество стандартных возможностей современных языков программирования, например использование внешних библиотек, механизмов инкапсуляции, наследования и других объектно-ориентированных особенностей.

Язык Java является естественным решением для программирования прикладного кода внутри сервера СУБД. Язык SQL продолжает использоваться для доступа к данным и манипуляций над ними.

1.5.2. 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, как ни странно, может оказаться гораздо короче.

ODBC нельзя использовать непосредственно из Java, поскольку он основан на C-интерфейсе. Вызов из Java C-кода нарушает целостную концепцию Java, пробивает брешь в защите и делает программу трудно-переносимой.

Перенос ODBC C-API в Java-API нежелателен. К примеру, Java не имеет указателей, в то время как в ODBC они используются.

ODBC слишком сложен для понимания. В нем смешаны простые и сложные вещи, причем сложные опции иногда применяются для самых простых запросов.

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 представляет собой и описывает имя хоста, порт и соответствующий идентификатор для доступа к соответствующей базе данных.

Однако, как уже говорилось выше, чаще всего, все-таки используется механизм ODBC благодаря его универсальности и доступности. Программа взаимодействия между драйвером JDBC и ODBC разработана фирмой JavaSoft в сотрудничестве с InterSolv и называется JDBC-ODBC-Bridge. Она реализована в виде JdbcOdbc.class (для платформы Windows JdbcOdbc.dll) и входит в поставку JDK1.1. Помимо JdbcOdbc-библиотек должны существовать специальные драйвера (библиотеки), которые реализуют непосредственный доступ к базам данных через стандартный интерфейс ODBC. Как правило эти библиотеки описываются в файле ODBC.INI. На внутреннем уровне JDBC-ODBC-Bridge отображает медоды Java в вызовы ODBC и тем самым позволяет использовать любые существующие драйверы ODBC, которых к настоящему времени накоплено в изобилии.

1.5.3. Доступ к языку SQL из Java с помощью интерфейса JDBC

Для обеспечения работы прикладного Java-кода в базе данных, необходимо обеспечить интерфейс доступа из Java к языку SQL. Совершенно аналогично тому, как операторы SQL доступны для вызова из обычных хранимых процедур, они должны быть доступны для вызова из методов, описанных на языке Java.

На клиентской стороне, для включения языка SQL в Java-методы используется интерфейс JDBC. JDBC - это прикладной программный интерфейс, введенный в набор Java SDK версии 1.1.0, и предназначенный для включения операторов SQL в методы на Java.

Для уменьшения различий между программированием клиентских и серверных приложений, необходимо обеспечить JDBC-доступ к SQL-операторам из методов на Java, изнутри СУБД. Именно поэтому внутренний интерфейс JDBC для Adaptive Server является ключевой особенностью Java-инициативы компании Sybase.


Существуют четыре типа драйверов JDBC:

- Драйвер, реализующий методы JDBC вызовами функций ODBC. Это так называемый мост (bridge) JDBC-ODBC. Непосредственную связь с базой при этом осуществляет драйвер ODBC.

- Драйвер, реализующий методы JDBC вызовами функций API самой СУБД.

- Драйвер, реализующий методы JDBC вызовами функций сетевого протокола, независимого от СУБД. Этот протокол должен быть, затем, реализован средствами СУБД.

- Драйвер, реализующий методы JDBC вызовами функций сетевого протокола СУБД.

1.5.4. Использование методов, упрощающих разработку под JDBC

Также как ODBC, JDBC представляет собой низкоуровневый прикладной интерфейс для доступа к СУБД. Аналогично тому, как во многих средствах быстрой разработки приложений существуют собственные высокоуровневые интерфейсы, построенные на основе ODBC, существует необходимость в интерфейсах на основе JDBC, которые позволят разработчикам быть более эффективными.

После того, как откомпилированные Java-классы будут инсталлированы в Adaptive Server, любые высокоуровневые инструменты и методы, генерирующие Java и JDBC-код, поддерживаются автоматически.

В их числе:

- JSQL. JSQL - это альтернативный метод включения SQL-вызовов в Java-код. Этот стандарт поддерживается консорциумом, включающий в себя компании IBM, Sybase, Oracle, Tandem.

- По сути, JSQL реализует возможности, аналогичные возможностям встроенного SQL (Embedded SQL), но для JDBC. Во многих случаях писать на JSQL проще, чем непосредственно на JDBC. Дополнительным преимуществом для администраторов баз данных является сходство этого метода с написанием обычных хранимых процедур на SQL.

Перед компиляцией, JSQL-код преобразуется препроцессором в вызовы SQL. Пользователи Adaptive Server смогут, при желании, использовать JSQL и встраивать обработанный препроцессором код в сервер СУБД.

- RAD-инструменты Инструменты для быстрой разработки приложений (RAD-инструменты) для Java, включая инструмент Sybase PowerJ, используют Java-классы, созданные на основе вызовов JDBC, с целью обеспечения разработчиков более удобным интерфейсом. Такие классы также могут быть инсталлированы в СУБД.

- JavaBeans это стандарт на компоненты: набор Java-классов со стандартным интерфейсом доступа. Компоненты JavaBeans могут быть установлены в сервер СУБД аналогично остальным наборам классов.

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

Возможность использования компонентов JavaBeans на любых уровнях распределенной информационной системы, включая СУБД, позволит воспользоваться преимуществами языка Java при разработке корпоративных прикладных баз данных. Adaptive Server будет поддерживать исполнение компонентов кода на основе стандартов JavaBeans и Enterprise JavaBeans.

В связи с использованием виртуальной машины для исполнения методов на Java и встроенной поддержке интерфейса JDBC, один и тот же объект на языке Java (созданный непосредственно на JDBC, либо с помощью какого-либо RAD-средства, включая PowerJ) может быть использован как внутри, так и вне СУБД.

В компании Sybase существует четкое убеждение, что для получения максимальных выгод от использования Java, критически важным является отсутствие особых требований для Java-классов, предназначенных для встраивания в СУБД. В отличии от некоторых других подходов, реализация Sybase целиком основывается на этой важнейшей особенности.

1.5.5. Возможные проблемы при использовании Java


Безопасность и производительность являются наиболее частыми предметами для размышления для администраторов баз данных и отделов информационных технологий. Обсуждение реализации требований по безопасности и производительности в Java также являются предметом постоянной дискуссии в Java-сообществе.

Вопросы безопасности


Вопросы безопасности и целостности являются важнейшими для организаций, которые хранят свои данные в реляционных СУБД. Как поставщик технологий для корпоративных информационных систем, компания Sybase осознает эти требования и именно поэтому применяется архитектура Java. Например:

- В СУБД можно использовать только те классы, которые установлены администратором базы данных.

- Администратор имеет возможность управлять доступом из SQL к методам и полям класса.

- Виртуальная машина, встроенная в Adaptive Server, не поддерживает операции, которые могут нарушить безопасность сервера СУБД.

- Язык Java проектировался с учетом вопросов безопасности, поэтому он хорошо подходит на роль языка приложений, исполняющихся непосредственно в СУБД.

Вопросы производительности

Несмотря на то, что производительность Java-приложений является популярной темой для обсуждения, компания Sybase разделяет мнение многих специалистов, считающих, что подобные опасения исчезнут в течении следующего года. Аналитик Stan Doelberg из компании Forrester Research, обсуждавший недавно данную проблему, полагает, что "в течении шести месяцев проблема производительности будет снята".

Различные разработчики компиляторов, включая соответствующее подразделение в Powersoft, продолжают работать над улучшениями языка. Пользователи Adaptive Server смогут воспользоваться этими разработками, после того, когда они установят скомпилированные Java-классы в сервер СУБД.

Дополнительно, администратор СУБД сможет настраивать параметры хранения объектов в классе.

2. Разработка программы обработки баз даных

2.1. Разработка приложения

Программа, разработанная мной на языке java, выполняет работу с базой данных SQL, представленных ввиде фирм и наименований товаров, связаных с фирмой. Кроме этого пользователю предоставляется возможность поиска как товаров, так и фирм, которые производят эти товары, соответственно по наименованию.

Общий вид приложения изображен на рисунке 2.1.


Рисунок 2.1 - Общий вид приложения изображен


В левой части рабочей области приложения изображен список товаров, а в правой - фирмы, предоставляющие товары. К каждой фирме приписывается ее адрасс и название.

В верхней части рабочей области приложения можно выполнить поиск по товару или по фирме.

2.2. Анализ приложения

2.2.1. Добавление данных

Приложение позволяет добавлять данные в базу данных. Для этого необходимо выбрать в меню «Настройки базы даных» как это показано на рисунке 2.2.


Рисунок 2.3 - Настройки базы даных


Пользователю, чтобы получить доступ к редактированю, необходимо ввести IP адресс базы данных как это сделано на рисунке 2.4.

Рисунок 2.4 – Ввод IP базы данных

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

Добавление товара показано на рисунке 2.5.

Рисунок 2.5 – Добавление товара


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

Пример поиска по фирме показан на рисунке 2.6.


Рисунок 2.6 - Поиск по фирме

Вывод

Java представляет собой новый язык программирования для разработки прикладных программ, а дополнительные технологии JavaBeans и Enterprise JavaBeans являются важными объектными моделями для создания приложений на Java. В то же время, реляционные СУБД являются наиболее широко используемым типом СУБД для решения задач бизнеса. Возможность хранить и запускать Java-объекты в реляционных СУБД открывают новые возможности для корпоративных разработчиков, а также позволяет использовать достоинства Java при разработки корпоративных прикладных информационных систем.

Перечисленные методы не исчепывают возможности использования Java-программ при работе с базами данных. Следует учесть, что технологии постоянно развиваются, совершенствуются и пополняются новыми стандартами. Совсем недавно Microsoft объявила о создании новых стандартов RDO, ADO и OLE DB. Эти разработки, также как JDBC движутся в направлении объектно-ориентированных технологий и основаны на классах, которые могут быть применены в JDBC. В то же время и JDBC развивается и в скором времени появится язык JSQL, который уже анонсировали некоторые компании. В этом случае, SQL операторы можно будет встраивать в Java программы, а не передавать их как строковые переменные в Java-методы. Встроенный SQL-препроцессор позволит программистам использовать Java-переменные в SQL операторах.


Литература

  1. Кей С. Хорстман, Гарри Корнелл «Java 2. Библиотека профессионала»;
  2. Г. Шилдт «Полный справочник по Java»;
  3. Баркалов А.А. Микропрограммное устройство управления как композиция автоматов с программируемой и жёсткой логикой. Автоматика вычислительная техника, 1983, №4.-с.36-41.
  4. Barkalov A.A., Titarenko L.A. Synthesis of operational and control automate.- Donets’с: Untech, 2005.-25pp.
  5. Maxfield C. The Design Warrior’s Guide for FPGA.-Amsterdam: Elsevier, 2004.-541 p.
  6. Smith M. Application – Specific Integrated Circuits. - Boston: Addison - Wesley, 1997.-836 pp.
  7. Baranov S. Logic Synthesis for Control Automate.- Boston: Kluwer Academic Publishers, 1984.-312pp.