Использование специализированных библиотек и встраиваемого SQL.
Каждая СУБД помимо интерактивной SQL-утилиты обязательно имеет библиотеку доступа и набор драйверов для различных операционных систем. Схема взаимодействия клиентского приложения с сервером базы данных в этом случае выглядит так: Библиотека доступа - это, как правило, объектный файл, исходный код которого создан на универсальном языке типа C. Эта библиотека содержит набор функций, позволяющих пользовательскому приложению соединятся с базой данных, передавать запросы серверу и получать ответные данные. Типичный набор функций такой библиотеки (имена функций зависят от используемой библиотеки):
Разумеется это минимальный набор функций для работы с базой данных. Обычно в библиотеке присутствуют также функции, позволяющие определить характеристики структуры result (число, порядок и имена столбцов, число строк, номер текущей строки), передвигаться по этой структуре не только вперед, но и назад (DB_next, DB_prev) и т.д. Пример программы, использующей библиотеку связи с базой данных: #include <dblib.h> /* Файл, содержащий описание функций библиотеки */........ /* Организация интерфейса с пользователем, запрос его имени и пароля */ /* Присвоение значений переменным: dbname - имя базы данных */ /* username - имя пользователя */ /* password - пароль */......... db=DB_connect(dbname,username,password); /* Установление соединения */ if (db == NULL) { error_message(); /* Выдача сообщения об ошибке на монитор пользователя */ exit(1); /* Завершение работы */ }.......... /* Ожидание запроса пользователя. Формирование строки s_query - запроса */ /* на выборку данных */.......... result=DB_select(db,s_query); /* Пересылка запроса на сервер */ if (result==NULL) { error_message(); /* Ошибка выполнения запроса. Выдача сообщения */ exit(2); /* Завершение работы */ }.......... /* Вывод результатов запроса на монитор пользователя. Ожидание следующего */ /* запроса. Подготовка строки u_query="UPDATE... SET...", содержащей */ /* запрос на изменение данных. */.......... res=DB_exec(db,u_query); /* Пересылка запроса на сервер */ if (res!= 0) { error_message(); /* Ошибка выполнения запроса. Выдача сообщения */ exit(2); /* Завершение работы */ }.................... DB_close(db); /*Завершение работы */Данная программа, обеспечивающая взаимодействие пользователя с СУБД, компилируется совместно с библиотекой доступа. Библиотечные вызовы преобразуются драйвером базы данных в сетевые вызовы и передаются сетевым программным обеспечением на сервер.
На сервере происходит обратный процесс преобразования: сетевые пакеты -> функции библиотеки -> SQL-запросы, запросы обрабатываются, их результаты передаются клиенту. Как видим, такой способ создания приложений чрезвычайно гибок, позволяет реализовать практически любое приложение, но в то же время имеет явные недостатки:
В результате получаем приложение, которое привязано как к сетевой среде, так и к программно-аппаратной платформе и используемой базе данных.
Некоторой модификацией данного способа является использование "встроенного" языка SQL. В этом случае в текст программы на языке третьего поколения включаются не вызовы библиотек, а непосредственно предложения SQL, которые предваряются ключевым выражением "EXEC SQL". Перед компиляцией в машинный код такая программа обрабатывается препроцессором, который транслирует смесь операторов "собственного" языка СУБД и операторов SQL в "чистый" исходный код. Затем коды SQL замещаются вызовами соответствующих процедур из библиотек исполняемых модулей, служащих для поддержки конкретного варианта СУБД. Такой подход позволил несколько снизить степень привязанности к СУБД, например, при переключении прикладной программы на работу с другим сервером базы данных достаточно было заново обработать ее исходный текст новым препроцессором и перекомпилировать.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|