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

Динамический SQL – разновидность программного SQL, предназначенная для встраивания SQL-операторов в текст программы на языке программирования высокого уровня, допускающая динамическое формирование и выполнение запросов во время работы программы.

История возникновения динамического SQL во многом связана с компанией IBM , внедрившей этот мощный инструмент в свою СУБД DB2 . Стандарты SQL , в частности SQL -1, не поддерживали динамического SQL . Лишь в 1992 году в стандарт SQL -2 были включены спецификации динамического SQL . Основной концепцией динамического SQL является следующее утверждение: встроенная инструкция SQL не записывается в исходный текст программы, вместо этого программа формирует текст инструкции во время выполнения в одной из своих областей данных, а затем передает сформированную инструкцию в СУБД для динамического выполнения [ [ 3.1 ] ].

Напомним, что при использовании статического SQL схема реализации подразумевала два этапа – компиляцию программы и выполнение программы. При этом на этап компиляции ложилась основная нагрузка. Именно здесь решались вопросы проверки, разбора и оптимизации запросов , поскольку запрос был заранее известен.

Программы, которые пишут себя сами | Метапрограммирование в C#/.NET: Начало | Expression Trees

Совершенно очевидно, что подобную двухэтапную схему нельзя реализовать для динамического SQL , так как на этапе компиляции программы запрос неизвестен. Поэтому проверку, разборку и оптимизацию запросов здесь приходится выполнять непосредственно во время работы программы.

Таким образом, если эти операции в статическом SQL выполнялись во время компиляции один раз, то в динамическом SQL они будут выполняться столько раз для одного запроса, сколько раз он будет сформирован в процессе работы прикладной программы. Это определяет существенный недостаток динамического SQL – низкую производительность по сравнению со статическим. Достоинство динамического SQL в том, что он позволяет формировать запрос к базе данных во время работы программы, реагируя на те или иные произошедшие события. Такая возможность является жизненно важной для клиент-серверной и трехзвенной архитектур , в которых структура базы данных и деловые правила имеют тенденцию к изменению, что требует определенной гибкости при организации процесса обработки данных.

Учитывая относительно низкую производительность динамического SQL , представляется правильным, там, где только возможно, рекомендовать использование статической разновидности SQL , применяя аппарат динамического SQL где это действительно необходимо.

Динамический SQL также должен содержать дополнительные операторы (по сравнению с интерактивным SQL ). Основные операторы динамического SQL приводятся в следующей таблице.

Источник: intuit.ru

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

Единственный в мире Музей Смайликов

Уроки по SQL | Создание таблиц, добавление данных | Связь один к одному


Самая яркая достопримечательность Крыма

Скачать 8.45 Mb.

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

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

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

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

Протокол JDBC

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

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

С развитием глобальных сетей, в частности Интернета, и всех сопутствующих технологий стали появляться новые языки, специально предназначенные для работы в новых условиях. Одним из таких языков является язык программирования Java. В настоящее время Интернет-приложения занимают существенное место на рынке, работая в рамках 2-, 3- и многозвенной архитектуры.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вариант 1.

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

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

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

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

Вариант 2.

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

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

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

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

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

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

Вариант 3.

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

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

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

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

Вариант 1.

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

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

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

Читайте также:
Как удалить программу Microsoft Edge

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

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

Вариант 2.

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

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

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

Вариант 3.

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

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

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

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

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

Вариант 1.

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

ð+ DELETE

ð+ INSERT

ð+ DECLARE TABLE

ð+ EXEC SQL

ð+ OPEN

Вариант 2.

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

ð+ 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?

Источник: topuch.com

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

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

Таблица 13.3.

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

Назначение Функция Описание

SQLAlocEnv Получает указатель окр ужения . Одно окру —

жение может служить для создания несколь —

ких соединений .

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

Соединение с источником

SQLConnect Соединяется с указанн ым драйвер ом , ис —

пользуя имя источника данных , идентифика —

тор пользователя и пароль .

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

SQLPrepare Подготавливает SQL выражение для даль —

нейшего использования .

Подготовка 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 представляет собой большой и сложный механизм . Так , в

библиотеке предусмотрены специальные механизмы обработки ошибок , разные спо —

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

Краткие итоги : В лекции рассматриваются разные технологии формирования запросов

на языке SQ L в прикла дных программах ( программный SQL). Дается понятие статического

SQL, динамического SQL и приводятся соответствующие основные операторы . Рассматри —

ваются интерфейсы программирования приложений (API) ( протокол ODBC, протокол JDBC,

библиотека DB-Library).

Источник: www.studmed.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru