Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
Клиентская библиотека Firebird
Клиентская библиотека Firebird поставляется во множестве вариантов, которые обрабатывают идентичные API-функции приложений для версии сервера, к которому они обращаются. В табл. 7.1 в конце этой главы представлены имена и размещение этих библиотек.
В большинстве случаев клиентская библиотека использует клиентские сетевые протоколы операционной системы для связи с одним или более серверами Firebird, реализуя специальный интерфейс для архитектуры клиент-сервер Firebird на уровне приложения поверх сетевого протокола.
Не смешивайте версии клиента и сервераВажным является соответствие версии клиентской библиотеки и версии сервера. Используйте клиент версии 1.0.x с сервером версии 1.0.x и клиент версии 1.5 с сервером версии 1.5.
Помните также, что клиент версии 1.5 может быть инсталлирован в тот же каталог, что и клиент 1.0, а может быть поставлен в отдельный каталог. При переустановке новой версии изучите файл README и документацию по инсталляции (размещается в корневом каталоге инсталляции Firebird и в подкаталоге /doc на сервере), чтобы выяснить, какая информация данной книги устарела.
Все клиентские приложения и промежуточное программное обеспечение должны использовать API для доступа к базам данных Firebird. API Firebird имеет обратную совместимость с API InterBase. Документ "InterBase API Guide" (Руководство no API InterBase), доступный в Borland, содержит полное описание API для разработки высокопроизводительных приложений. Более поздние возможности документированы в официальных замечаниях по релизу Firebird и в ограниченном объеме в заголовочных файлах, поставляемых с Firebird[11].
Разработка приложений
Когда вы создали и заполнили данными базу данных, ее содержимое может быть доступно через клиентское приложение. Некоторые клиентские приложения - такие как инструмент Firebird isql и ряд прекрасных коммерческих и открытых инструментов администратора базы данных - предоставляют возможности интерактивной выборки данных и создания метаданных.
Любое приложение, разработанное в качестве интерфейса пользователя к одной или более базам данных Firebird, будет использовать язык запросов SQL для определения сохраняемых наборов данных и для передачи серверу операторов SQL, запрашивающих операции с данными и метаданными.
Firebird реализует множество операторов SQL, синтаксис которых имеет высокий уровень соответствия с признанным стандартом SQL-92. API Firebird предоставляет полные структуры для компоновки операторов SQL и связанных параметров и для получения приложениями результатов.
Динамические приложения клиент-сервер
Во время выполнения программы приложениям часто бывают нужны операторы SQL, которые создаются или изменяются приложениями или вводятся пользователями. Приложения обычно предоставляют пользователю списки выбора, извлекаемые из таблиц базы данных, которые используют пользователи для указания критериев поиска желаемых ими данных, и операции, которые они хотят выполнить. Программа конструирует запросы на основании выборов пользователя и управляет найденными данными.
Клиентские приложения используют динамический SQL (DSQL) для создания запросов во время выполнения. Клиент Firebird объявляет API как библиотеку функций, которые передают сложные структуры записей, формируют протокол на уровне данных для связи между приложением и сервером.
! ! !
ПРИМЕЧАНИЕ. Программирование с использованием API - большая тема. Ее описание выходит за рамки данной книги. Но поскольку динамический SQL сам не предоставляет некоторых функций, здесь описываются отдельные функции API, чтобы помочь вам понять, как драйверы и интерфейсные компоненты делают их доступными в соответствующих средах проектирования.
. ! .
Ядро API Firebird
Программирование с использованием API необходимо при написании драйверов для создания сценариев в таких языках, как PHP и Python, и при разработке объектно- ориентированных классов доступа к данным для объектно-ориентированных языков типа Java, C++ и Object Pascal. Приложения также могут быть написаны с прямыми вызовами функций API без посредничества драйверов. Эти приложения "прямого API" могут быть мощными, гибкими, быстро-выполняемыми, небольшого размера и с прекрасным управлением распределением памяти.
Функциональные категории ядра APIФункции API (все их имена начинаются с isc) делятся на восемь категорий.
* Соединение с базой данных и отсоединение от базы данных - например,
isc_attach_database().
* Запуск, подготовка, подтверждение и откат транзакций - например,
isc_start_transaction().
* Вызовы выполнения операторов - например, isc_dsql_describe().
* Вызовы BLOB - например, isc_biob_info().
* Вызовы для массивов - например, isc_array_get_slice().
* Безопасность базы данных - например, isc_attach_database().
* Информационные вызовы - например, isc_database_info().
* Преобразования даты и целых - например, isc encode date().
Более подробную информацию по программированию прямого API см. в "API Guide" документации по InterBase 6, опубликованной фирмой Borland.
Интерфейсы приложений при использовании APIПриложения, которые используют общие интерфейсы типа ODBC или JDBC, основаны на операторах DSQL, располагающихся ниже пользовательских интерфейсов, таких как построители запросов и др.
В связи с увеличением числа инструментов быстрой разработки приложений (Rapid Application Development, RAD) за последнее десятилетие инкапсуляция функций API в "обертку" классов и компонентов разработчикам под Firebird предоставлены разнообразные привлекательные средства создания приложений.
Объектно-ориентированные классыОбъектно-ориентированные классы и компоненты доступа к данным инкапсулируют вызовы функций и структуры данных API. Все они имеют свойства и методы, которые анализируют и выполняют синтаксический разбор запрашиваемых операторов, а также управляют возвращаемыми результатами. Богатые классы включают методы и свойства, которые поддерживают специальные возможности Firebird, такие как распределенные транзакции, обработка массивов, параметризованные операторы. Большинство наборов компонентов реализует, по меньшей мере, один класс компонента- контейнера для буферизации одной или более строк, возвращаемых клиенту в виде результирующего набора. Некоторые реализуют продвинутые техники, такие как прокручивание курсоров, "живые данные", обратные вызовы и управление транзакциями.
Драйвер JayBird Туре 4 ("родной") JDBC поставляет интерфейс, предназначенный для независимой от платформы разработки на Java с использованием Firebird. Некоторые наборы компонентов устанавливаются в качестве интерфейса разработчиками, использующими Delphi, Kylix и C++ Builder для написания клиентов баз данных Firebird. Двумя лучшими наборами компонентов являются IB Objects и FIBPlus. Доступны некоторые другие наборы компонентов, осуществляющие минимальную поддержку возможностей Firebird. Более подробную информацию см. в приложении 3.
Встроенные приложения Firebird
Firebird предоставляет две различные встраиваемые модели: приложения встроенного SQL (Embedded SQL) и встраиваемые серверы.
Приложения встроенного SQLВ этой модели программа приложения включает в себя интерфейс клиент-сервер и уровень приложения конечного пользователя- все в одном исполняемом модуле. Операторы SQL находятся непосредственно в исходном коде программы, написанной на С, C++ или другом языке программирования. Затем исходный код приложения обрабатывается препроцессором gpre, который отыскивает блоки кода, содержащие операторы SQL. Он подставляет макровызовы функций, которые функционально эквивалентны функциям динамической библиотеки API. Когда работа препроцессора завершается, все выполненные преобразования операторов SQL компилируются вместе с приложением. Такие операторы перед компилированием называются статическим SQL.
В таком стиле приложений доступно специальное расширенное подмножество исходных команд, похожих на SQL. Встроенный SQL (Embedded SQL, ESQL) предоставляет программисту простой язык высокого уровня в виде "черного ящика", в то время как gpre выполняет всю работу по преобразованию сложных языковых структур в эквивалентные вызовы API. Эти статические операторы дают незначительное увеличение скорости по сравнению с динамическим SQL, поскольку не требуют дополнительных затрат на синтаксический разбор и интерпретацию операторов SQL во время выполнения.
Язык и техники ESQL подробно не обсуждаются в данной книге. Документ "InterBase Embedded SQL Guide" ("Руководство по встроенному SQL InterBase", EmbedSQL.pdf), доступный в Borland, содержит описания, необходимые для разработки встроенных приложений Firebird.
Приложения встраиваемого сервераВ модели встраиваемого сервера не существует преобразований операторов SQL. Клиент и сервер объединяются в одну компактную динамическую библиотеку для получения независимого приложения. Приложение загружает библиотеку во время запуска точно так же, как обычное приложение Firebird будет загружать клиентскую библиотеку, функции API вызываются во время выполнения. При этом нет необходимости инсталлировать внешний сервер, потому что такой клиент внутренне связывается со своим собственным экземпляром серверного процесса Firebird. Когда приложение завершается, оно выгружает встраиваемый сервер, так что не сохраняется никакого серверного процесса.