В. И. Швецов Базы данных
Скачать 8.45 Mb.
|
ODBC (Open Database Connectivity – открытый доступ к базам данных) – разработанный компанией Microsoft универсальный интерфейс программирования приложений для доступа к базам данных [1]. Основной целью разработки протокола ODBC считается стандартизация механизмов взаимодействия с различными СУБД. Основная проблема, связанная с разработкой приложений, взаимодействующих с базами данных на основе специальных SQL API, состояла в том, что каждая СУБД имела собственный программный интерфейс доступа, каждый из них имел свои особенности и функционировал не совсем так, как другие. В связи с этим разработка приложения существенно зависела от используемой СУБД. Компания Microsoft сделала важный шаг для решения этой проблемы. Основная идея заключалась в разработке универсального интерфейса на уровне семейства операционных систем Windows, который мог бы быть поддержан в разных СУБД. Рассмотрим кратко структуру программного обеспечения ODBC [1]:
Схема выполнения программы с использованием протокола ODBC для доступа к данным приводится на рис.13.5. Рис. 13.5. Схема выполнения программы с использованием протокола ODBC для доступа к данным Перечень некоторых базисных функций ODBC API приводится в следующей таблице. Таблица 13.3. Базисные функции ODBC API
Протокол JDBC JDBC (Java Database Connectivity) представляет собой API для выполнения SQL-запросов к базам данных из программ, написанных на языке Java [1]. Рассмотрим основные принципы JDBC. С развитием глобальных сетей, в частности Интернета, и всех сопутствующих технологий стали появляться новые языки, специально предназначенные для работы в новых условиях. Одним из таких языков является язык программирования Java. В настоящее время Интернет-приложения занимают существенное место на рынке, работая в рамках 2-, 3- и многозвенной архитектуры. При этом значение языка Java как средства создания приложений, работающих с базами данных, существенно возрастает. Именно это и явилось одной из основных причин разработки нового программного интерфейса – JDBC. Первоначально интерфейс JDBC был разработан компанией Sun Microsystems, в настоящий момент этот API поддерживается всеми ведущими коммерческими СУБД. Известно несколько различных версий JDBC. Так, версия 1.0 содержала некоторые средства доступа к данным:
Этот перечень определенным образом напоминает аналогичный функциональный аппарат протокола ODBC. Версия JDBC 2.0 содержит существенные отличия. Так, вследствие увеличения возможностей интерфейса было проведено его идеологическое разделение на две основные части: Core API (основные возможности) и Extensions API (так называемые расширения). В [1] указаны следующие возможности JDBC:
Версия 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, выглядит следующим образом:
Краткие итоги: В лекции рассматриваются разные технологии формирования запросов на языке 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? |