Курсовая работа (т): Язык структурированных запросов SQL. Использование SQL в прикладном программировании

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

Также большим преимуществом является возможность интегрировать SQL сразу в несколько компонентов одной системы, написанной с использованием разных языков программирования - например, WEB-компонент системы, написанный на Javascript, и внутренняя, инкапсулированная от пользователей часть на C++, могут использовать SQL в равной степени, создавать запросы, подключаться в БД по мере необходимости и так далее. Эта возможность еще сильнее повышает универсальность системы. В трех следующих подразделах будут представлены практические примеры использования SQL в рамках трех языков: Pascal (выбран как наиболее хорошо демонстрирующий возможности программирования для начинающих специалистов), C++ (выбран как язык с чрезвычайно широкими возможностями, использующийся повсеместно и породивший множество родственных языков), Object ABAP (данный специфический пример позволит увидеть, каким образом SQL можно интегрировать в язык напрямую, без использования расширений).

3.2 Использование SQL в Pascal (на примере Pascal Lazarus)

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

Технически, однако, в данном примере будет показан не Pascal в чистом виде, а его объектная версия, используемая в графической среде разработки Lazarus. Lazarus является бесплатным аналогом популярного инструмента Delphi, потому работа с ним может также дать представление об устройстве этого продукта.

Для подробного разбора механики соединения с базой данных MySQL посредством языка Pascal все операторы необходимо прописывать вручную (подключение к хосту и так далее). Однако Lazarus существенно облегчает задачу программиста посредством множества готовых классов, объекты которых можно разместить на форме программы по аналогу с Delphi и получить в свое распоряжение мощные инструменты для подключения к базам данных различных СУБД и для других задач.

На рисунке 9 показаны строки с объектами, предназначенными для подключения к различным СУБД в программе Lazarus и для управления данными, полученными из баз данных:

Рисунок 9: Инструменты для работы с базами данных в Lazarus (желтым выделены наиболее важные для работы с MySQL)

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

В реализованном тестовом приложении данные для подключения вводятся в специальные текстовые поля на форме.

Для вывода результатов запроса был добавлен объект класса Tmemo - набор текстовых строк. Программа процедурально выводит в него выборку, полученную из SQLQuery. Для ввода нового запроса был добавлен еще один объект класса Tmemo.

Прежде чем отправлять запросы к БД, необходимо установить соединение. Для этого используется изменение значения свойства 'Connected' у MySQL50Connection на 'true':50Connection1.Connected := true

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

Как показала практика, составление и отправка запросов не представляют сложности при использовании Lazarus: обычная текстовая строка, которую пользователь вводит в текстовое поле, по нажатию кнопки передается в объект SQLQuery, которые затем отправляет ее по соединению в СУБД. Результат (в том числе, текст возможной ошибки) возвращается в этот же объект, из которого программа затем может получить необходимые данные.

Этот принцип работает не только с выборкой, но и с редактированием, и с удалением записей. Более того, в реализованной программе отсутствует зависимость от конкретной таблицы - процедуры построены таким образом, что программа сама формирует выводимый список, в зависимости от того, с какой таблицей работает. Однако в силу тестовой природы этого решения было решено не заострять внимание на внешнем виде графической оболочки - главное, чтобы программа выполняла поставленные функции.

Работа с Pascal и Lazarus дала представление об удобстве как языка, так и программной среды в случае проектирования программы небольшого масштаба и сложности. Кроме возможности подключить СУБД MySQL Lazarus позволяет теми же стандартными средствами подключаться к другим системам управления базами данных, что является несомненным плюсом.

На рисунке 10 изображено окно получившейся программы с результатами выборки:

Рисунок 10: Окно тестовой программы, созданной в Lazarus

3.3 Использование SQL в C++ (на примере MS Visual Studio)

Язык C++ предоставляет широкие возможности для разработки проектов любой сложности, однако изучение всех сторон его природы может потребовать много времени. Особенным преимуществом этого языка является возможность подключения множества дополнительных файлов и библиотек, которых конкретно для C++ было разработано огромное количество.

Тем не менее, именно подключение внешних компонентов может стать узким местом при разработке для этого языка. В частности, для работы с СУБД MySQL приложение должно использовать файл mysql.h и еще несколько библиотек MySQL кроме него, однако особенности среды разработки MS Visual Studio могут помешать программе отыскать правильные файлы, если не указать путь к ним явно. Именно такая проблема и возникла при создании проекта на C++ в Visual Studio. Решена эта проблема была добавлением необходимых библиотек (libmysql.dll, libmysql.lib, libmysqld.dll, libmysqld.lib) из каталога с сервером MySQL в корневой каталог проекта [22].

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

После успешного добавления файлов windows.h, winsock.h и mysql.h с помощью стандартного служебного слова include, проект может работать с СУБД MySQL посредством функций, взятых из специально разработанных для этого библиотек.

Для подключения к базе данных создается коннектор:

MYSQL *<имя_переменной>;

Затем выполняется подключение как таковое посредством следующих функций:

= mysql_init(NULL);

//функция подключения выведена в оператор ветвления для проверки успешного подключения

if (!mysql_real_connect(conn, "localhost", "root", "root", "test", NULL, NULL, 0))

{(stderr, "Ошибка: невозможно подключиться к базе данных\n");

}

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

Несмотря на кажущуюся бедность функционала в сравнении с Lazarus, C++, даже в варианте консольного приложения, предоставляет широкие возможности для работы с базами данных. Возможно, именно по причине широких возможностей этого языка при работе в нем с базами данных можно столкнуться с многочисленными ошибками. Кроме того, следует отметить, что, будучи разработкой компании Microsoft, Visual Studio предоставляет куда больше возможностей по работе с СУБД той же самой фирмы (Microsoft SQL Server, MS Access)[7].

Полный листинг тестовой программы с возможностью посылать SQL-запросы к базе данных можно найти в приложении.

3.4 Использование SQL в ABAP (на примере SAP GUI)

В качестве третьего примера была взята достаточно специфичная технология - язык программирования высокого уровня ABAP на платформе, для которой он и был разработан - SAP GUI.GUI сам по себе является обширным инструментарием работы с разнообразными бизнес-системами SAP - аналогом отечественного 1C. SAP GUI позволяет как администрировать систему, так и вести разработки в ней. Очевидно, что всякое бизнес-приложение в той или иной мере должно обращаться к базам данных - отсюда следует, что технология, на которой приложение построено, должна поддерживать общение с базами данных на том или ином языке.

В случае ABAP технология была интегрирована в язык еще на стадии разработки - для осуществления SQL-запросов не требуется подключать никаких внешних файлов. Более того, сама семантика языка ABAP не делает различий между фактической таблицей, существующей в базе данных, и временной таблицей, созданной в процессе выполнения программы - в обоих случаях обращение к таблицам будет вестись посредством SQL-запросов. Это многократно облегчает задачи программистов и позволяет достичь высоких результатов при программировании обращений к базам данных [20].

Тем не менее, ABAP имеет множество недостатков. В первую очередь, это морально устаревшая концепция, сама архитектура языка, который не обладает той же гибкостью, что C или C++. Недостатки эти, однако, слабо связаны с SQL и технологией обращения к БД, так что в данном случае могут быть опущены.

Кроме прочего, системы SAP (по сути, единственный род приложений, использующих ABAP) подключаются к базам данных напрямую, посредством специально для этого разработанных технологий. Это значит, что при наличии рабочей системы SAP, подключенной к корректно построенной базе данных, разработка кода может вестись без оглядки на проблемы с подключением, различные коннекторы и объекты, посредством которых осуществляется соединение, - эта часть системы абстрагирована от пользовательских разработок. Таким образом, прямо в теле кода ABAP можно записывать SQL-запросы, которые при выполнении программы будут выполнены в том порядке, в каком они идут. При этом не нужно описывать фактические таблицы наравне с переменными - они берутся из общего списка таблиц, релевантного для всей системы [23].

На рисунке 11 продемонстрирован фрагмент кода, где видно, что вместе с SQL-запросами выполняются обычные операторы языка, а сами запросы применяются как для таблиц базы данных, так и для внутренних таблиц, созданных по ходу выполнения программы.

Рисунок 11: Фрагмент кода на языке ABAP

поддерживает большинство функций языка SQL. Кроме широких возможностей ABAP программист может расширить его функционал посредством привязки к системе решений, построенных на других технологиях. Обновление SAPUI5 является прекрасным примером такой связки: WEB-часть проекта, написанная на Javascript, отправляет и получает данные из ABAP. При этом на стороне Javascript могут формироваться SQL-запросы, которые затем отправляются в систему через технологию Gateway. Однако, как и было замечено, ABAP является специфическим языком, созданным специально для систем SAP. Его применение за пределами таких систем, в принципе, невозможно, и в данной работе язык был приведен лишь в качестве примера того, как глубоко SQL может быть интегрирован с технологией программирования.

.5 Сравнение результатов использования SQL в различных языках программирования

Из трех приведенных примеров каждый язык программирования обладает яркими особенностями использования в нем SQL-запросов. в среде разработки Lazarus отличается удобством использования и наглядностью - вследствие объектно-ориентированного подхода к программированию. Среди заготовленных классов коннекторов есть способные подключаться к различным СУБД - не только MySQL. Классы запросов получают от базы данных подробную информацию о том, как был выполнен запрос, что позволяет видеть текст ошибки при выполнении программы, даже если не были прописаны соответствующие исключения.

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

Язык ABAP представляет собой далекое от универсальности средство, предназначенное, в принципе, для работы с базами данных в бизнес-среде SAP. Это налагает жесткие ограничения на возможности языка как такового, однако уровень интеграции SQL в него так велик, что никаких дополнительных действий для подключения к базе данных внутри кода, в принципе, делать не нужно - SQL-запросы пишутся как часть общей программы и выполняются так же. Таким образом можно сказать, что Lazarus наиболее подходит для разработок малых и средних приложений, работающих с базами данных, C++ в среде Visual Studio - для более крупных программ, а ABAP, будучи самым удобным в плане работы с SQL, можно использовать только в рамках SAP.

ЗАКЛЮЧЕНИЕ

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

Также были описаны основные характеристики баз данных: модели данных, приведены основные разновидности моделей с описанием их особенностей; тип данных, которые содержатся в базе; фактор распределенности базы данных.

Из наиболее популярных моделей данных в современной информационной науке отдельное положение занимает реляционная, основанная на отношениях (таблицах) и связях между ними. Имея большие преимущества в контексте использования на практике, при информационном моделировании реальных объектов и связей между ними, реляционная модель применяется в проектировании баз данных чаще всего.

После определения баз данных и их основных свойств было дано описание систем управления базами данных - СУБД: это программный инструмент создания, управления и доступа к базе данных того типа, для которого была создана данная СУБД. По причине распространенности реляционных баз данных наибольшее развитие получили именно реляционные СУБД. Среди них: Microsoft Access, MySQL, Firebird и другие.

Остановившись на реляционных базах данных была подробнее описана их модель: отношения, связи между ними, принципы существования такой модели. Только обладая знаниями в теории реляционных БД, можно переходить к более узким дисциплинам - в частности, языку SQL. Исходя из особенностей реляционной модели, можно прийти к выводу о том, что она является наиболее подходящей для наглядного проектирования базы данных и понятна среднему пользователю, но имеет также некоторые недостатки, из которых главным является избыточность данных. Перед изучением языка SQL был показан процесс концептуального моделирования реляционной базы данных с использованием схемы «сущность - связь» либо языка UML.

Язык SQL, как основной стандарт обращения к реляционным базам данных, получил большое развитие. За годы его совершенствования было создано несколько стандартов, а также диалектов, разработанных специально для конкретных технологий.

Источник: https://www.bibliofond.ru/detail.aspx?id=862505