Главная страница
Навигация по странице:

  • DB_connect(char *имя_базы_данных, char *имя_пользователя, char *пароль)

  • DB_exec(db, char *запрос)

  • DB_select(db, char *запрос)

  • DB_fetch(result)

  • База данных-понятия. Классификация по


    Скачать 0.55 Mb.
    НазваниеКлассификация по
    АнкорБаза данных-понятия.docx
    Дата17.07.2018
    Размер0.55 Mb.
    Формат файлаdocx
    Имя файлаБаза данных-понятия.docx
    ТипДокументы
    #21614
    страница12 из 23
    1   ...   8   9   10   11   12   13   14   15   ...   23

    4.7.Вопросы практического програмирования.


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

    Почти все способы организации взаимодействия пользователя с базой данных, рассматриваемые ниже, основаны на модели "клиент-сервер". Т.е. предполагается, что каждое приложение обработки данных разбито, как минимум, на две части:

    • клиента, который отвечает за организацию пользовательского интерфейса

    • сервер, который собственно хранит данные, обрабатывает запросы и посылает их результаты клиенту для отображения

    При этом предполагется, что каждая часть приложения функционирует на отдельном компьютере, т.е. к выделенному серверу БД с помощью локальной сети подключены персональные компьютеры пользователей (клиенты). Это наиболее популярная сегодня схема организации вычислительной среды. Более подробно архитектура "клиент-сервер" и различные способы ее реализации будут обсуждаться в главе 7.

    Язык SQL позволяет только манипулировать данными, но в нем отсутствуют средства создания экранного интерфейса, что необходимо для пользовательских приложений. Для создания этого интерфейса служат универсальные языки третьего поколения (C, C++, Pascal) или проблемно-ориентированные языки четвертого поколения (xBase, Informix 4Gl, Progress, Jam,...). Эти языки содержат необходимые операторы ввода / вывода на экран, а также операторы структурного программирования (цикла, ветвтеления и т.д.). Также эти языки допускают определение структур, соответствующих записям таблиц обрабатываемой базы данных. В исходный текст программы включаются операторы языка SQL, которые во время исполнения передаются серверу БД, который собственно и производит манипулирование данными. Отношения, полученные в результате выполнения сервером SQL-запросов, возвращаются прикладной программе, которая заполняет строками этих отношений заранее определенные структуры. Дальнейшая работа клиентской программы (отображение, корректировка записей) ведется с этими структурами.

    Рассмотрим различные способы орагнизации доступа прикладной программы к серверу базы данных.

    4.7.1.Использование специализированных библиотек и встраиваемого SQL.


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

    http://www.mstu.edu.ru/study/materials/zelenkov/lib.gif

    Библиотека доступа - это, как правило, объектный файл, исходный код которого создан на универсальном языке типа C. Эта библиотека содержит набор функций, позволяющих пользовательскому приложению соединятся с базой данных, передавать запросы серверу и получать ответные данные. Типичный набор функций такой библиотеки (имена функций зависят от используемой библиотеки):

    • DB_connect(char *имя_базы_данных, char *имя_пользователя, char *пароль) - устанавливает соединение с базой данной, возвращает указатель на структуру db, описывающую характеристики этого соединения

    • DB_exec(db, char *запрос) - выполнить запрос к базе данных, определяемой структурой db. Применяется для любых запросов кроме SELECT. Возвращает код выполнения запроса (0 - удачно, либо код ошибки)

    • DB_select(db, char *запрос) - выполнить запрос на извлечение данных (SELECT). Возвращает структуру result, содержащую результаты выполнения запроса (реляционное отношение).

    • DB_fetch(result) - извлечь следующую запись из структуры result.

    • DB_close(db) - закрыть соединение с базой данных.

    Разумеется это минимальный набор функций для работы с базой данных. Обычно в библиотеке присутствуют также функции, позволяющие определить характеристики структуры result (число, порядок и имена столбцов, число строк, номер текущей строки), передвигаться по этой структуре не только вперед, но и назад (DB_next, DB_prev) и т.д. Пример программы, использующей библиотеку связи с базой данных:

    #include /* Файл, содержащий описание функций библиотеки */

    ........

    /* Организация интерфейса с пользователем, запрос его имени и пароля */

    /* Присвоение значений переменным: 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 замещаются вызовами соответствующих процедур из библиотек исполняемых модулей, служащих для поддержки конкретного варианта СУБД.

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

    4.7.2.CLI - интерфейс уровня вызовов.


    Большим достижением явилось появление (1994 г.) в стандарте SQL интерфейса уровня вызова - CLI (Call Level Interface), в котором стандартизован общий набор рабочих процедур, обеспечивающий совместимость со всеми основными серверами баз данных. Ключевой элемент CLI - специальная библиотека для компьютера-клиента, в которой хранятся вызовы процедур и большинство часто используемых сетевых компонентов для организации связи с сервером. Это ПО поставляется разработчиком средств SQL, не является универсальным и поддерживает разнообразные транспортные протоколы.

    Использование программных вызовов позволяет свести к минимуму операции на компьютере-клиенте. В общем случае клиент формирует оператор языка SQL в виде строки и пересылает ее на сервер посредством процедуры исполнения (execute). Когда же сервер в качестве ответа возвращает несколько строк данных, клиент считывает результат с помощью серии вызовов процедуры выборки данных. Далее информация из столбцов полученной таблицы может быть связана с соответствующими переменными приложения. Вызов специальной процедуры позволяет клиенту определить считанное число строк, столбцов и типы данных в каждом столбце.

    Интерфейс CLI построен таким образом, что перед передачей запроса серверу клиент не должен заботиться о типе оператора SQL, будь то выборка, обновление, удаление или вставка.

    4.7.3.ODBC - открытый интерфейс к базам данных на платформе MS WIndows.


    Очень важный шаг к созданию переносимых приложений обработки данных сделала фирма Microsoft, опубликовавшая в 1992 году спецификацию ODBC (Open Database Connetcivity - открытого интерфейса к базам данных), предназначенную для унификации доступа к данным с персональных компьютеров работающих под управлением операционной системы Windows. (Заметим, что ODBC опирается на спецификации CLI). Структурная схема доступа к данным с использованием ODBC:

    http://www.mstu.edu.ru/study/materials/zelenkov/odbc.gif

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

    • приложения становятся привязанными к платформе MS Windows

    • увеличивается время обработки запросов (как следствие введения дополнительного программного слоя)

    • необходимо предварительная инсталляция ODBC-драйвера и настройка ODBC (указание драйвера, сетевого пути к серверу, базы данных и т.д.) на каждом рабочем месте. Параметры этой настройки являются статическими, т.е. приложение их самостоятельно изменить не может.

    4.7.4.JDBC - мобильный интерфейс к базам данных на платформе Java.


    JDBC (Java DataBase Connectivity) - это интерфейс прикладного программирования (API) для выполнения SQL-запросов к базам данных из программ, написанных на языке Java. Напомним, что язык Java, созданный компанией Sun, является платформенно - независимым и позволяет создавать как собственно приложения (standalone application), так и программы (апплеты), встраиваемые в web-страницы. Более подробная информация о Java и связанных с ним технологиях находится на серверах java.sun.ru.

    http://www.mstu.edu.ru/study/materials/zelenkov/jdbc.gif

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

    Более подробно спецификация JDBC рассмотрена а статье С.Орлика "Обзор спецификации JDBC", СУБД N 3, 1997 г. Полный текст спецификации (на английском языке) находится по адресу java.sun.com/jdbc/.

    Литература:

    • Мартин Грабер. Введение в SQL.-М.:Лори,1996.

    • Дж.Боуман, С.Эмерсон, М.Дарновски. Практическое руководство по SQL.-Киев: Диалектика,1997.


    Следующая глава: 4.8.Навигационный подход к манипулированию данными и персональные СУБД.
    1   ...   8   9   10   11   12   13   14   15   ...   23


    написать администратору сайта