Главная страница

В. И. Швецов Базы данных


Скачать 8.45 Mb.
НазваниеВ. И. Швецов Базы данных
АнкорV_I_Shvetsov_Bazy_dannykh.doc
Дата20.12.2017
Размер8.45 Mb.
Формат файлаdoc
Имя файлаV_I_Shvetsov_Bazy_dannykh.doc
ТипУчебное пособие
#12252
страница21 из 24
1   ...   16   17   18   19   20   21   22   23   24

ODBC (Open Database Connectivity – открытый доступ к базам данных) – разработанный компанией Microsoft универсальный интерфейс программирования приложений для доступа к базам данных [1].

Основной целью разработки протокола ODBC считается стандартизация механизмов взаимодействия с различными СУБД. Основная проблема, связанная с разработкой приложений, взаимодействующих с базами данных на основе специальных SQL API, состояла в том, что каждая СУБД имела собственный программный интерфейс доступа, каждый из них имел свои особенности и функционировал не совсем так, как другие. В связи с этим разработка приложения существенно зависела от используемой СУБД. Компания Microsoft сделала важный шаг для решения этой проблемы. Основная идея заключалась в разработке универсального интерфейса на уровне семейства операционных систем Windows, который мог бы быть поддержан в разных СУБД.

Рассмотрим кратко структуру программного обеспечения ODBC [1]:

  • интерфейс вызовов функций ODBC: это так называемый верхний уровень ODBC, содержащий API, который и используется непосредственно приложениями. Данный API реализован в виде библиотеки динамической компоновки Dll и входит в состав операционной системы Windows;

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

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

Схема выполнения программы с использованием протокола ODBC для доступа к данным приводится на рис.13.5.

Рис. 13.5. Схема выполнения программы с использованием протокола ODBC
для доступа к данным
Перечень некоторых базисных функций ODBC API приводится в следующей таблице.
Таблица 13.3.

Базисные функции ODBC API

Назначение

Функция

Описание

Соединение с источником данных



SQLAlocEnv

Получает указатель окружения. Одно окружение может служить для создания нескольких соединений.

SQLAlIoc Connect

Получает указатель соединения.

SQLConnect

Соединяется с указанным драйвером, используя имя источника данных, идентификатор пользователя и пароль.

Подготовка SQL

запросов


SQLAllocStmt

Размещает указатель выражения.

SQLPrepare

Подготавливает SQL выражение для дальнейшего использования.

SQLGet CursorName

Возвращает имя, связанное c указателем выражения.

SQLSet CursorName

Устанавливает имя курсора.

Выполнение запросов

SQLExecute

Выполняет заранее подготовленный запрос.



SQLExec Direct

Выполняет запрос.

Выборка результатов и информации о результатах



SQLRow Count

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

SQLNum ResultCol

Возвращает количество колонок в выбранном наборе данных.

SQLDescribe Col

Описывает колонку в выбранном наборе данных.

SQLCol Attributes

Описывает атрибуты колонки в выбранном наборе данных.

SQLBindCol

Присваивает место в памяти для колонки в выбранном наборе данных и указывает ее тип данных.

SQLFetch

Возвращает несколько наборов данных.


Протокол JDBC

JDBC (Java Database Connectivity) представляет собой API для выполнения SQL-запросов к базам данных из программ, написанных на языке Java [1].

Рассмотрим основные принципы JDBC.

С развитием глобальных сетей, в частности Интернета, и всех сопутствующих технологий стали появляться новые языки, специально предназначенные для работы в новых условиях. Одним из таких языков является язык программирования Java. В настоящее время Интернет-приложения занимают существенное место на рынке, работая в рамках 2-, 3- и многозвенной архитектуры. При этом значение языка Java как средства создания приложений, работающих с базами данных, существенно возрастает. Именно это и явилось одной из основных причин разработки нового программного интерфейса – JDBC. Первоначально интерфейс JDBC был разработан компанией Sun Microsystems, в настоящий момент этот API поддерживается всеми ведущими коммерческими СУБД.

Известно несколько различных версий JDBC. Так, версия 1.0 содержала некоторые средства доступа к данным:

  • диспетчер драйверов (для подключения к разным СУБД);

  • механизм управления сеансами (для одновременной работы с несколькими СУБД);

  • механизм передачи инструкций SQL на выполнение в СУБД;

  • механизм работы с курсорами (для передачи результатов выполнения запросов из СУБД в приложение).

Этот перечень определенным образом напоминает аналогичный функциональный аппарат протокола ODBC.

Версия JDBC 2.0 содержит существенные отличия. Так, вследствие увеличения возможностей интерфейса было проведено его идеологическое разделение на две основные части: Core API (основные возможности) и Extensions API (так называемые расширения).

В [1] указаны следующие возможности JDBC:

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

  • Курсоры с произвольным доступом. В JDBC 2.0 существует средство, позволяющее перемещаться по результатам запроса произвольным образом.

  • Обновляемые курсоры. В JDBC 2.0 курсоры, наряду с функцией возврата результата запроса, используются и при обновлении базы данных. Обновления производятся при добавлении или изменении одной из строк в результатах запроса.

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

Версия JDBC 3.0 появилась совсем недавно и содержит такие новации, как объектно-реляционные расширения SQL и улучшенные механизмы обработки транзакций. Архитектура JDBC берет свое начало от ODBC и в существенной части повторяет ее, поэтому схема выполнения программы на Java с использованием протокола JDBC для доступа к данным полностью аналогична схеме на рис. 13.5 (слова ODBC заменяются на слова JDBC). В отличие от ODBC, драйверы JDBC подразделяются на четыре типа. Основные отличия между этими типами связаны с местонахождением API СУБД (на клиентской или серверной СУБД) и способом доступа к базе данных (через собственный API СУБД или через ODBC).

Библиотека DB-Library

Библиотека DB-Library реализует интерфейс программирования приложений для совместной работы с широко распространенной СУБД Microsoft SQL Server. Данная библиотека является весьма обширной и содержит более 100 функций. Основными из них являются:

dblogin(); dbopen() – подключение к БД;

dbopen(); dbexit() – установка/разрыв соединения с БД;

dbcmd() – передача инструкции (пакета инструкций) SQL в СУБД в текстовом виде;

dbSQLexec() – требование к СУБД выполнить текущий пакет инструкций;

dbcancel() – прекращение выполнения пакета инструкций SQL;

dbresults() – получение результатов выполнения очередной инструкции SQL в текущем пакете;

dbbind(), dbdata(), dbnextrow(), dbnumcols(), dbdatlen() и др. – обработка результатов запросов на выборку данных.

Логика работы прикладной программы, обрабатывающей данные, хранящиеся в базе данных под управлением Microsoft SQL Server, выглядит следующим образом:

  • при помощи указанных выше функций (dblogin(), dbopen()) прикладная программа формирует сведение об авторизации и пытается установить соединение с СУБД;

  • при помощи СУБД программа открывает конкретную базу данных, с которой будет происходить работа (dbopen());

  • при помощи специальной функции (dbcmd()) программа передает в СУБД текст SQL-инструкции, которую далее необходимо будет выполнить; в библиотеке DB-Library поддерживается так называемый пакетный режим работы. Данный режим подразумевает возможность создания пакетов инструкций. Так, вызывая функцию dbcmd() несколько раз, вы можете передать в СУБД текст нескольких команд SQL, которые впоследствии будут выполнены как одна команда;

  • используя функцию dbSQLexec(), программа вызывает выполнение инструкций, переданных ранее при помощи вызовов функций dbcmd();

  • вызывая функцию dbresults(), программа может определить, удалось ли СУБД выполнить очередную инструкцию (как правило, число вызовов dbresults() соответствует числу инструкций в очередном пакете);

  • в случае если мы имеем дело с запросом, возвращающим набор строк в качестве результата (запросом на выборку), программа при помощи вызовов функции dbbind() осуществляет связывание каждого поля результатов запроса с некоторой областью оперативной памяти. Далее при помощи функции dbnextrow() программа выполняет переход к следующей строке результатов запроса, что приводит к помещению в буфер новых данных;

  • при помощи функции dbexit() программа разрывает соединение с базой данных. Библиотека DB-Library представляет собой большой и сложный механизм. Так, в библиотеке предусмотрены специальные механизмы обработки ошибок, разные способы передачи результатов выполнения запросов в прикладную программу и т.д.

Краткие итоги: В лекции рассматриваются разные технологии формирования запросов на языке SQL в прикладных программах (программный SQL). Дается понятие статического SQL, динамического SQL и приводятся соответствующие основные операторы. Рассматриваются интерфейсы программирования приложений (API) (протокол ODBC, протокол JDBC, библиотека DB-Library).
Контрольные тесты
Задача 1. Что такое программный SQL?

Вариант 1.

Особенности программного SQL по сравнению с интерактивным
ð используются принципиально другие операторы

ð пользователь пишет программу на языке SQL

ð+ могут использоваться те же операторы SQL

ð+ запрос на языке SQL встраивается в программу на алгоритмическом языке

Вариант 2.

Какие специальные конструкции (дополнительные операторы) должны быть в программном SQL?
ð оператор цикла

ð оператор ветвления

ð+ оператор, определяющий начало запроса на языке SQL

ð+ оператор, определяющий окончание запроса на языке SQL

ð+ операторы, указывающие дополнительные переменные для обработки результатов запроса

ð операторы, определяющие передачу управления от программы на алгоритмическом языке программе на языке SQL

Вариант 3.

За счет чего последовательность запросов, встроенных в прикладную программу будет выполняться быстрее, чем та же последовательность запросов, выполняемая в интерактивном режиме?

ð+ запросы могут выполняться с опережением

ð+ запросы компилируются один раз

ð+ заранее выполняются действия по анализу и компиляции запросов

ð+ компьютер не ожидает ответных действий пользователя
Задача 2. Как происходит работа с программой при использовании статического SQL?

Вариант 1.

Как должен выглядеть запрос на языке в прикладной программе в этом случае?
ð+ должно быть указано фактическое имя таблицы

ð имя таблицы может быть указано как параметр

ð+ должны быть указаны фактические имена атрибутов

ð имена атрибутов могут быть указаны как параметры

ð в запросах могут широко использоваться переменные

ð+ переменные могут использоваться в запросах только на месте констант

Вариант 2.

Как компилируется и компонуется прикладная программа с встроенным запросом на языке SQL?
ð прикладная программа компилируется вместе с текстом запроса

ð+ текст запроса компилируется отдельно

ð сформированный модуль запроса вставляется в модуль прикладной программы

ð+ в модуль прикладной программы вставляется вызов функции СУБД

Вариант 3.

Как происходит выполнение прикладной программы?
ð+ переход из прикладной программы к запросу осуществляется вызовом специальной функции

ð скомпилированная вместе с текстом запроса прикладная программа автоматически выполняется

ð+ при неоднократном выполнении одного и того же запроса используется один и тот же программный модуль

ð при каждом выполнении одного и того же запроса используются разные программные модули

Задача 3. Характеристика команд статического SQL

Вариант 1.

Какие операторы могут быть использованы в статическом SQL?
ð+ SELECT

ð+ DELETE

ð+ INSERT

ð+ DECLARE TABLE

ð+ EXEC SQL

ð+ OPEN

Вариант 2.

Какие специальные операторы могут быть использованы в статическом SQL?
ð SELECT

ð DELETE

ð INSERT

ð+ DECLARE TABLE

ð+ EXEC SQL

ð+ GET DIAGNOSTIC

ð+ DECLARE CURSOR
Вариант 3.

Какие специальные операторы могут быть использованы в статическом SQL для указания начала и конца SQL- запроса?
ð DECLARE TABLE

ð+ EXEC SQL

ð GET DIAGNOSTIC

ð+ ; (точка с запятой)

ð END DECLARE


Задача 4. Особенности динамического SQL по сравнению со статическим ?

Вариант 1.

Как должен выглядеть запрос на языке в прикладной программе в этом случае?
ð запрос должен быть определен в тексте прикладной программы

ð+ запрос формируется во время работы прикладной программы

ð+ имя таблицы может быть указано как параметр

ð+ имена атрибутов могут быть указаны как параметры

ð+ в запросах могут широко использоваться переменные

ð переменные могут использоваться в запросах только на месте констант

Вариант 2.

Как компилируется и компонуется прикладная программа при использовании динамического SQL?
ð прикладная программа компилируется вместе с текстом запроса

ð текст запроса компилируется отдельно один раз

ð сформированный модуль запроса вставляется в модуль прикладной программы

ð+ в модуль прикладной программы вставляется вызов функции СУБД

ð+ текст запроса компилируется столько раз, сколько раз запрос формируется прикладной программой

Вариант 3.

Как происходит выполнение прикладной программы при использовании динамического SQL?
1   ...   16   17   18   19   20   21   22   23   24


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