Как я писал в прошлых постах, СУБД — это обычная программа, только работающая специальным образом. Можно сказать чуть больше — в мире программирования практически все продукты являются обычными программами, без какой-то волшебной магии. СУБД устанавливается на компьютер — хоть на простой ноутбук, хоть на дорогущий сервер.
Некоторые из СУБД (например — SQLite) вообще работают даже на мобильных устройствах. Собственно говоря, как и любая другая программа, СУБД хранится в некоторой папке. В случае с ОС Windows, это часто C/Program Files.
Установленная СУБД ассоциируется с некоторым «портом», и начинает его прослушивание на предмет входящих подключений. В случае с MySQL, номер такого порта — 3306. В случае с PostgreSQL — 5432. Подключение внешних клиентов (программ или пользователей) осуществляется по IP-адресу компьютера и указанному порту. Одновременно из внешнего мира, к СУБД могут подключиться достаточно много клиентов — сотни, а иногда и десятки тысяч, в зависимости от мощности компьютера.
C++ и ACCESS. Пример работы с ACCESS на Windows Forms C++.
Помимо «алгоритмической» части, СУБД так же включает в себя сами базы данных. То есть, файлы специального формата. Эти файлы хранятся в физических папках, на этом же компьютере. Это может быть диск C, или любой другой. Путь к папке, где будут храниться файлы базы, определяется при установке СУБД. Как можно понять, сама СУБД занимает условные 100-700 Мб, в зависимости от системы.
При этом, файлы баз данных могут быть условно «бесконечными» по размеру — и зависят напрямую от приложения, которое будет записывать данные в базу — и конечно от мощности компьютера.
СУБД — фоновая программа ⚙️
Основная особенность СУБД заключается в том, что такие системы работают в фоновом режиме — то есть, у них нет видимого интерфейса. Взаимодействие же внешних программ с такими системами осуществляется через SQL-запросы — то есть тексты специального формата. Если мы посмотрим внутрь условного интернет-сайта, или же внутрь некоторого приложения, то найдем там прямые тексты SQL запросов, которые отправляются в СУБД через TCP-IP подключение. Другими словами — прикладной программный код существует отдельно, а работающая в фоновом режиме СУБД существует отдельно.
Если говорить про облачные базы данных — то вышеуказанный принцип тоже сохраняется. Так же программа-СУБД устанавливается на компьютер-сервер, и настраивается специальным образом. При этом, на таком компьютере хранится только какой-то кусочек базы — несколько таблиц из общей массы, или какая-то отдельная часть одной очень большой таблицы. При этом, несколько таких компьютеров связываются между собой, и работают как единое целое.
После установки СУБД на компьютер, установщик попросит тебя придумать логин и пароль администратора базы. Это типовой шаг, который есть практически у всех систем. После того как пароль будет задан, установщик запустит СУБД на твоем компьютере в «фоновом режиме».
Так же, установщик пропишет внутри компьютера нужные настройки, чтобы сразу после включения компьютера СУБД стартовала автоматически. После этого, этап установки заканчивается. С этого момента с базой данных можно начинать работать. Обрати внимание — каждый раз после включения компьютера, СУБД будет автоматически запускаться. Сама база данных — это просто набор файлов.
О взаимодействии с базой данных
Без включенного СУБД работать с базой данных не представляется возможным.
Для работы с базой данных используют или специальный «коннектор», или GUI / IDE, или консоль. Коннектор — это программная библиотека, которая поставляется производителем конкретной СУБД для разных языков программирования. GUI / IDE — это человекопонятный интерфейс для работы с базой как с простым Excel-файлом. И наконец консоль — это обычная текстовая консоль, которая позволяет отправлять в базу какие-то данные, и потом читать их оттуда с помощью SQL. Независимо от выбора варианта, вероятным языком общения с базой данных будет SQL.
Типовой алгоритм взаимодействия приложения с базой данных
Первый шаг в работе с базой данных заключается в установлении соединения между приложением и базой данных. Обычно для этого используется специальный драйвер (коннектор) базы данных, который предоставляет необходимые функции для взаимодействия. Приложение передает данные о подключении, такие как адрес сервера базы данных, имя пользователя и пароль, чтобы установить безопасное и аутентифицированное соединение.
«Драйвер» / «Коннектор» — звучит очень сложно, но на практике выглядит очень просто. Внутри языков программирования, практически в каждом из них — есть готовые библиотеки для работы с различными СУБД. Чтобы например подключиться из языка PHP к СУБД MySQL, достаточно знать логин, пароль и номер порта. После этого, нужно будет написать несколько строк со специальным синтаксисом, и вуаля — можно сохранять, искать или обновлять данные.
Опять же, практически все приложения работают с базами данных. Практически все интернет-сайты работают с базами данных. Высокоуровневые языки программирования уже давно развиты настолько, что предоставляют доступ практически ко всем популярным СУБД — остаётся только знать специальный синтаксис, и можно создавать отличные программы, которые умеют хранить внутри себя данные.
Источник: dzen.ru
Организация доступа к БД из ПП
1. Организация доступа к БД из прикладных программ 2. Понятие курсора Язык SQL предназначен для организации доступа к БД. Доступ к данным может быть осуществлен в 2-х режимах:– интерактивном и в режиме выполнения приложений. SQL не является языком программирования.
Для создания приложений используются другие языки, в которые встраиваются операторы SQL. Все возможности интерактивного языка запросов доступны и в прикладном программировании Существует 2 способа применения SQL в прикладных программах: · Встроенный SQL. При таком подходе операторы SQL непосредственно встраиваются в исходный текст программы на базовом языке.
При компиляции программы со встроенными операторами SQL используется специальный препроцессор SQL, который преобразует исходный текст в исполняемую программу. · Интерфейс программирования приложений (API). При использовании этого метода прикладная программа взаимодействует с СУБД путем применения специальных функций. Вызывая эти функции, программа передает СУБД операторы SQL и получает обратно результаты запросов. При объединении операторов SQL с базовым языком программирования соблюдаются следующие принципы: · Операторы SQL включаются в текст программы на исходном языке программирования. Исходная программа поступает на вход препроцессора, который компилирует операторы SQL. · Встроенные операторы SQL могут ссылаться на переменные базового языка программирования.
Рекомендуемые материалы
Ответы на экзамен верны на 100%
Программирование и алгоритмизация
220 169 руб.
Вариан 24 — ДЗ №3 — Программирование на С++ с использованием классов
Объектно-ориентированное программирование (ООП)
500 290 руб.
Вариант 24 — ДЗ №1 — Программирование на ObjectPascalс использованием классов
Объектно-ориентированное программирование (ООП)
500 290 руб.
Расчетно-графическая работа по курсу «Программирование». Семинар 2. Овладение навыками обработки символьных данных.. Вариант 22
Программирование и алгоритмизация
Расчетно-графическая работа по курсу «Программирование». Семинар 2. Обработка символьной информации. Вариант 18
Программирование и алгоритмизация
Расчетно-графическая работа по курсу «Программирование». Семинар 2. Обработка символьной информации. Вариант 17
Программирование и алгоритмизация
4. Архитектура ODBC В интерфейс ODBC включены следующие элементы: 1. Библиотека функций, вызов которых позволяет подключаться к базе данных, выполнять SQL- операторы и извлекать информацию из результирующих наборов данных. 2. Стандартный механизм подключения и регистрации в СУБД. 3. Стандартное представление для данных различных типов. 4. Стандартный набор кодов ошибок.
5. Типовой синтаксис SQL-операторов, построенный на использовании спецификаций X/Open и ISO CLI. Архитектура ODBC
Общая архитектура ODBC (см. рисунок 15) включает 4 элемента: · Приложение, которое выполняет обработку данных и вызов функций библиотеки ODBC для отправки SQL- операторов в СУБД и выборки возвращаемой СУБД информации. · Менеджер драйверов – выполняет загрузку необходимых драйверов по требованию приложения. Менеджер драйверов был разработан компанией Microsoft и представляет собой библиотеку DLL. · Драйверы и агенты баз данных обрабатывают вызовы функций ODBC и направляют SQL-запросы конкретным источникам данных, а также возвращают полученные результаты приложению.
При необходимости драйверы выполняют модификацию исходного запроса с целью приведения его в соответствие с синтаксическими требованиями целевой СУБД. Драйверы могут предоставлять только те возможности, которые обеспечиваются целевой СУБД.
В архитектурном решении с использованием нескольких ODBC- драйверов все перечисленные задачи решаются самим ODBC-драйвером, и использовать агенты БД не требуется. В случае использования единственного драйвера для каждого типа СУБД потребуется применение агентов базы данных, размещаемого на стороне сервера.
При обработке запросов на доступ к базе данных эти агенты тесно сотрудничают с ODBC драйвером, расположенным на стороне клиента. В среде Windows единый ODBC-драйвер реализован в виде библиотеки DLL. Агенты баз данных реализуются как процессы, выполняемые на сервере целевой СУБД. · Источники данных содержат те данные, доступ к которым необходим пользователю приложения. 5.
КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Назовите способы использованием языка SQL в прикладных программах. 2. В чем заключаются отличия интерактивного и встроенного в прикладные программы оператора SELECT? 3. Какого вида запросы возможны при использовании встроенного SQL? 4. В чем заключается модификация оператора SELECT при его использовании для создания однострочных запросов?
Обратите внимание на лекцию «1.3. Представление информации». 5. Объясните смысл понятия курсора при работе с многострочными запросами. Какие операторы служат для создания и использования курсоров. 6. Какие ограничения накладываются на запрос, связанный с курсором при выполнении команд обновления и удаления данных? 7. Для чего предназначена технология ODBC?
8. Как происходит настройка соединения ODBC для получения доступа к данным? 9. Какие элементы включает архитектура ODBC? 10. Для чего предназначены драйверы ODBC?
Источник: studizba.com
Использование языка SQL в прикладных программах
Как замечено выше, программный SQL отличается от обычной, интерактивной формы наличием некоторых специальных инструкций, а также механизмом трансляции и выполнения запросов. Таким образом, для применения программного SQL в тексте своих программ программистам необходимо ознакомиться с некоторым специфическим набором инструкций. Стоит заметить, что в разных СУБД эти наборы инструкций, вообще говоря, могут несколько отличаться друг от друга. В результате возникает некоторая проблема, связанная с непереносимостью программы.
Наряду с описанным выше механизмом существует и активно применяется еще один подход, связанный с наличием специальных интерфейсов – API (application programming interface – интерфейс программирования приложений ). Эти API представляют собой библиотеки функций, разработанные для обеспечения связи прикладной программы с СУБД посредством выполнения SQL-запросов. Прикладная программа вызывает специальные функции библиотеки для передачи в СУБД SQL -запроса в текстовом виде и для получения результатов выполнения запросов, а также различной служебной информации.
Применение подобного подхода приводит к тому, что программистам более не требуется изучать специальные наборы инструкций SQL , а необходимо лишь изучить специальную библиотеку функций. С учетом того, что механизм использования API является широко используемым и стандартным подходом (чего только стоит использование мощного аппарата Windows API ), для специалистов нет ничего нового в изучении еще одной библиотеки, в данном случае – для общения с СУБД .
Кроме этого, программа , содержащая вызовы некоторых функций специализированной библиотеки, ничем не отличается по схеме компиляции и выполнения от обычной программы. Так, подобная программа не требует применения специализированного препроцессора с механизмом раздельной компиляции. Может показаться, что подход, связанный с использованием библиотек API , является наиболее прогрессивным, на самом же деле такой вывод вряд ли верен. Так, на настоящий момент очень активно используются и динамический SQL и библиотеки API . В каждом из этих подходов существуют свои достоинства, недостатки и границы разумной применимости. Как обычно, выбор того, каким из подходов воспользоваться, лежит на административной группе разработчиков базы данных , которая принимает решения в зависимости от особенностей конкретной задачи и имеющихся специалистов.
В данном разделе рассматривается подход, основанный на интерфейсе программирования приложений .
Посмотрим, как работают прикладные программы, использующие различные API . Принципы работы разных библиотек аналогичны. Схема работы приложения совместно с SQL API выглядит следующим образом [ [ 3.1 ] ]:
- программа получает доступ к базе данных путем вызова одной или нескольких API-функций, подключающих программу к СУБД и к конкретной базе данных;
- для пересылки инструкций SQL в СУБД программа формирует инструкцию в виде текстовой строки и затем передает эту строку в качестве параметра при вызове API-функции;
- программа вызывает выполнение API-функции для проверки состояния переданной в СУБД инструкции и обработки ошибок;
- если инструкция SQL представляет собой запрос на выборку, то, вызывая API-функции, программа записывает результаты запроса в свои переменные; обычно за один вызов возвращается одна строка или столбец данных;
- свое обращение к базе данных программа заканчивает вызовом API-функции, отключающей ее от СУБД.
Из имеющихся для реализации SQL -запросов интерфейсов API на настоящий момент выделилось несколько библиотек, «стандартных» в том смысле, что они активно применяются множеством разработчиков по всему миру. Данное пособие не является подробным руководством по всем этим библиотекам. Более того, для их профессионального освоения необходимо серьезное изучение соответствующей литературы. В рамках данного курса мы лишь приведем обзор этих библиотек, рассмотрим основные заложенные в них идеи. Подробно эти SQL API описаны, например в [ [ 3.1 ] ].
Протокол ODBC
ODBC (Open Database Connectivity – открытый доступ к базам данных) – разработанный компанией Microsoft универсальный интерфейс программирования приложений для доступа к базам данных [ [ 3.1 ] ].
Основной целью разработки протокола ODBC считается стандартизация механизмов взаимодействия с различными СУБД. Основная проблема, связанная с разработкой приложений, взаимодействующих с базами данных на основе специальных SQL API, состояла в том, что каждая СУБД имела собственный программный интерфейс доступа, каждый из них имел свои особенности и функционировал не совсем так, как другие. В связи с этим разработка приложения существенно зависела от используемой СУБД. Компания Microsoft сделала важный шаг для решения этой проблемы. Основная идея заключалась в разработке универсального интерфейса на уровне семейства операционных систем Windows, который мог бы быть поддержан в разных СУБД.
Рассмотрим кратко структуру программного обеспечения ODBC [ [ 3.1 ] ]:
- интерфейс вызовов функций ODBC: это так называемый верхний уровень ODBC, содержащий API , который и используется непосредственно приложениями. Данный API реализован в виде библиотеки динамической компоновки Dll и входит в состав операционной системы Windows;
- драйверы ODBC: это так называемый нижний уровень ODBC, содержащий набор драйверов для СУБД, поддерживающих протокол ODBC. В рамках технологии для каждой СУБД может быть разработан соответствующий ODBC-драйвер, который будет являться промежуточным звеном между прикладной программой и СУБД, транслируя вызовы функций СУБД в вызовы внутренних специализированных функций СУБД . Таким образом решается проблема стандартизации. Для многих современных СУБД существуют специализированные драйверы ODBC , отдельно устанавливаемые в операционную систему;
- диспетчер драйверов ODBC: данный программный механизм представляет средний уровень ODBC, управляя процессом загрузки необходимых драйверов.
Схема выполнения программы с использованием протокола ODBC для доступа к данным приводится на рис. 13.5.
Рис. 13.5. Схема выполнения программы с использованием протокола ODBC для доступа к данным
Перечень некоторых базисных функций 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 [ [ 3.1 ] ].
Рассмотрим основные принципы JDBC.
С развитием глобальных сетей, в частности Интернета, и всех сопутствующих технологий стали появляться новые языки, специально предназначенные для работы в новых условиях. Одним из таких языков является язык программирования Java . В настоящее время Интернет-приложения занимают существенное место на рынке, работая в рамках 2-, 3- и многозвенной архитектуры . При этом значение языка Java как средства создания приложений, работающих с базами данных, существенно возрастает. Именно это и явилось одной из основных причин разработки нового программного интерфейса – JDBC. Первоначально интерфейс JDBC был разработан компанией Sun Microsystems, в настоящий момент этот API поддерживается всеми ведущими коммерческими СУБД.
Известно несколько различных версий JDBC. Так, версия 1.0 содержала некоторые средства доступа к данным:
- диспетчер драйверов (для подключения к разным СУБД);
- механизм управления сеансами (для одновременной работы с несколькими СУБД);
- механизм передачи инструкций SQL на выполнение в СУБД;
- механизм работы с курсорами (для передачи результатов выполнения запросов из СУБД в приложение).
Этот перечень определенным образом напоминает аналогичный функциональный аппарат протокола ODBC.
Версия JDBC 2.0 содержит существенные отличия. Так, вследствие увеличения возможностей интерфейса было проведено его идеологическое разделение на две основные части: Core API (основные возможности) и Extensions API (так называемые расширения).
В [ [ 3.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).
Источник: intuit.ru