Краткое руководство. Использование Подключение or/C++ для подключения и запроса данных в База данных Azure для MySQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер
База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных Azure для MySQL см. в статье «Что происходит с одним сервером База данных Azure для MySQL?»
В этом кратком руководстве объясняется, как подключиться к базе данных Azure для MySQL с помощью приложения C++. Здесь также показано, как использовать инструкции SQL для запроса, вставки, обновления и удаления данных в базе данных. В этом разделе предполагается, что у вас уже есть опыт разработки на C++ и вы только начали работу с Базой данных Azure для MySQL.
Необходимые компоненты
В качестве отправной точки в этом кратком руководстве используются ресурсы, созданные в соответствии со следующими руководствами:
- Create an Azure Database for MySQL server using Azure portal (Создание базы данных Azure для сервера MySQL с помощью портала Azure)
- Create an Azure Database for MySQL server using Azure CLI (Создание сервера базы данных Azure для MySQL с помощью Azure CLI)
Также вам потребуется:
- установить .NET Framework;
- Установите Visual Studio.
- установить MySQL Connector/C++;
- установить Boost.
Убедитесь, что IP-адрес, с которого вы подключаетесь, добавлен в правила брандмауэра на сервере через портал Azure или Azure CLI.
Установка Visual Studio и .NET
В инструкциях этого раздела предполагается, что у вас уже есть опыт разработки с использованием .NET.
Windows
- Установите Visual Studio 2019 Community. Visual Studio Community 2019 — это полнофункциональная, расширяемая и бесплатная интегрированная среда разработки. С ее помощью можно создавать современные приложения для Android, iOS, Windows, а также веб-приложения, приложения базы данных и облачные службы. Можно установить полнофункциональную платформу .NET Framework или только .NET Core. Фрагменты кода в кратком руководстве будут работать в обоих случаях. Если среда Visual Studio уже установлена на вашем компьютере, то вы можете пропустить следующие два шага.
- Скачайте установщик Visual Studio 2019.
- Запустите установщик и выполните указанные действия, чтобы завершить установку.
Настройка Visual Studio
- В Visual Studio выберите «Проект -> Свойства -> Компоновщик -> Общие -> Дополнительные каталоги библиотек» и добавьте каталог lib\opt соединителя C++ (например, C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.9\lib\opt).
- Из Visual Studio проект —> свойства —> C/C++ —> общие —> дополнительные каталоги включения:
- Добавьте каталог \include соединителя C++ (например, C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.9\include).
- Добавьте корневой каталог библиотеки Boost (например, C:\boost_1_64_0).
- В Visual Studio выберите «Проект -> Свойства -> Компоновщик -> Ввод -> Дополнительные зависимости» и добавьте в текстовое поле mysqlcppconn.lib.
- Скопируйте файл mysqlcppconn.dll из папки библиотеки соединителя C++, указанной на шаге 3, в каталог, где хранится исполняемый файл приложения, или добавьте его в переменную среды, чтобы приложение смогло найти его.
Получение сведений о подключении
Получите сведения о подключении, необходимые для подключения к базе данных Azure.для MySQL. Вам потребуется полное имя сервера и учетные данные для входа.

- Войдите на портал Azure.
- В меню слева на портале Azure щелкните Все ресурсы и выполните поиск по имени созданного сервера (например, mydemoserver).
- Щелкните имя сервера.
- Запишите имя сервера и имя для входа администратора сервера с панели сервера Обзор. Если вы забыли свой пароль, можно также сбросить пароль с помощью этой панели.
Подключение, создание таблицы и вставка данных
Используйте приведенный ниже код для подключения и загрузки данных с помощью инструкций SQL CREATE TABLE и INSERT INTO. В коде используется класс sql::Driver с методом connect(), чтобы установить подключение к MySQL. Затем код использует методы createStatement() и execute() для выполнения команд базы данных.
Замените параметры Host, DBName, User и Password. Их можно заменить значениями, указанными при создании сервера и базы данных.
#include #include #include "stdafx.h" #include "mysql_connection.h" #include #include #include using namespace std; //for demonstration only. never save your password in the code! const string server = "tcp://yourservername.mysql.database.azure.com:3306"; const string username = "username@servername"; const string password = "yourpassword"; int main() < sql::Driver *driver; sql::Connection *con; sql::Statement *stmt; sql::PreparedStatement *pstmt; try < driver = get_driver_instance(); con = driver->connect(server, username, password); > catch (sql::SQLException e) < cout //please create database "quickstartdb" ahead of time con->setSchema("quickstartdb"); stmt = con->createStatement(); stmt->execute("DROP TABLE IF EXISTS inventory"); cout execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);"); cout prepareStatement("INSERT INTO inventory(name, quantity) VALUES(. )"); pstmt->setString(1, "banana"); pstmt->setInt(2, 150); pstmt->execute(); cout setString(1, "orange"); pstmt->setInt(2, 154); pstmt->execute(); cout setString(1, "apple"); pstmt->setInt(2, 100); pstmt->execute(); cout
Чтение данных
Используйте указанный ниже код с инструкцией SQL SELECT для подключения и чтения данных. В коде используется класс sql::Driver с методом connect(), чтобы установить подключение к MySQL. Затем код использует методы prepareStatement() и executeQuery() для выполнения команд SELECT. Далее код использует метод next() для перехода к записям в итоговом наборе. Наконец, с помощью методов getInt() и getString() код проанализирует значения в записи.
Замените параметры Host, DBName, User и Password. Их можно заменить значениями, указанными при создании сервера и базы данных.
#include #include #include "stdafx.h" #include "mysql_connection.h" #include #include #include #include using namespace std; //for demonstration only. never save your password in the code! const string server = "tcp://yourservername.mysql.database.azure.com:3306"; const string username = "username@servername"; const string password = "yourpassword"; int main() < sql::Driver *driver; sql::Connection *con; sql::PreparedStatement *pstmt; sql::ResultSet *result; try < driver = get_driver_instance(); //for demonstration only. never save password in the code! con = driver->connect(server, username, password); > catch (sql::SQLException e) < cout con->setSchema("quickstartdb"); //select pstmt = con->prepareStatement("SELECT * FROM inventory;"); result = pstmt->executeQuery(); while (result->next()) printf("Reading from table=(%d, %s, %d)\n", result->getInt(1), result->getString(2).c_str(), result->getInt(3)); delete result; delete pstmt; delete con; system("pause"); return 0; >
Обновление данных
Используйте указанный ниже код с инструкцией SQL UPDATE для подключения и чтения данных. В коде используется класс sql::Driver с методом connect(), чтобы установить подключение к MySQL. Затем код использует методы prepareStatement() и executeQuery() для выполнения команд UPDATE.
Замените параметры Host, DBName, User и Password. Их можно заменить значениями, указанными при создании сервера и базы данных.
#include #include #include "stdafx.h" #include "mysql_connection.h" #include #include #include #include using namespace std; //for demonstration only. never save your password in the code! const string server = "tcp://yourservername.mysql.database.azure.com:3306"; const string username = "username@servername"; const string password = "yourpassword"; int main() < sql::Driver *driver; sql::Connection *con; sql::PreparedStatement *pstmt; try < driver = get_driver_instance(); //for demonstration only. never save password in the code! con = driver->connect(server, username, password); > catch (sql::SQLException e) < cout con->setSchema("quickstartdb"); //update pstmt = con->prepareStatement("UPDATE inventory SET quantity = ? WHERE name = ?"); pstmt->setInt(1, 200); pstmt->setString(2, "banana"); pstmt->executeQuery(); printf("Row updated\n"); delete con; delete pstmt; system("pause"); return 0; >
Удаление данных
Используйте следующий код с инструкцией SQL DELETE для подключения и чтения данных. В коде используется класс sql::Driver с методом connect(), чтобы установить подключение к MySQL. Затем код использует методы prepareStatement() и executeQuery() для выполнения команд DELETE.
Замените параметры Host, DBName, User и Password. Их можно заменить значениями, указанными при создании сервера и базы данных.
#include #include #include "stdafx.h" #include "mysql_connection.h" #include #include #include #include using namespace std; //for demonstration only. never save your password in the code! const string server = "tcp://yourservername.mysql.database.azure.com:3306"; const string username = "username@servername"; const string password = "yourpassword"; int main() < sql::Driver *driver; sql::Connection *con; sql::PreparedStatement *pstmt; sql::ResultSet *result; try < driver = get_driver_instance(); //for demonstration only. never save password in the code! con = driver->connect(server, username, password); > catch (sql::SQLException e) < cout con->setSchema("quickstartdb"); //delete pstmt = con->prepareStatement("DELETE FROM inventory WHERE name = ?"); pstmt->setString(1, "orange"); result = pstmt->executeQuery(); printf("Row deleted\n"); delete pstmt; delete con; delete result; system("pause"); return 0; >
Очистка ресурсов
Чтобы очистить все ресурсы, используемые во время этого краткого руководства, удалите группу ресурсов с помощью следующей команды:
az group delete \ --name $AZ_RESOURCE_GROUP \ --yes
База знаний
Подключиться к базе данных можно разными способами. В данной статье описано как подключиться через консольный SQL клиент и графический SQL клиент DBgate.
Подключение к базе данных из консоли
Чтобы подключиться к базе данных через консольный клиент, установите на машине, с которой будет выполняться подключение, соответствующий клиент СУБД (MySQL или PostgreSQL). Далее выполните следующие команды.
Для MySQL:
mysql —host= [внешний IP-адрес кластера] —port=3306 —user=[пользователь БД] —database=[база данных] —password
Для PostgreSQL:
psql --host=[внешний IP-адрес кластера] --port=5432 --username=[пользователь БД] --dbname=[база данных] --password
Подключение к базе данных с помощью внешней утилиты
Ниже описано, как подключиться к базе данных при помощи приложения DBgate. По тому же принципу можно подключиться с помощью других популярных утилит, таких, как phpMyAdmin, pgAdmin, HeidiSQL и другие.
Для начала скачайте и установите DBgate, используя информацию с официального сайта.
Чтобы подключиться к базе данных, откройте DBgate и выполните следующие действия:
- Выберите в меню DBgate пункт New Connection;
- Укажите в выпадающем списке Connection Type нужную СУБД: MySQL или PostgreSQL;
- В списке Connection mode оставьте режим Host and port;
- В качестве хоста укажите внешний IP-адрес кластера СУБД;
- В качестве порта укажите 3306 для MySQL и 5432 для PostgreSQL;
Выбор кодировки для представления символов в базе данных
По умолчанию базы данных проекта CLO используют для символьных данных представление Unicode (UTF-8).
Для MySQL:
- Для MySQL 5.7: utf8
- Для MySQL 8: utf8mb3
Для PostgreSQL:
Encoding, Collate, Ctype: en_US.utf8
Изменить кодировку таблицы можно только в MySQL, с помощью консольной команды:
ALTER TABLE [название_таблицы] CONVERT TO CHARACTER SET [кодировка] COLLATE [сопоставление]
Внешнее подключение к MySQL
С помощью удаленного подключения к MySQL вы можете соединяться с базой данных на сервере хостинга с вашего домашнего компьютера, используя удобные для вас программы для работы с базами данных.
Простое подключение
Для настройки простого подключения к MySQL извне зайдите в Панель управления и перейдите в раздел «Базы данных» → «Доступ по IP».
Нажмите кнопку «Добавить IP» и укажите IP-адрес, с которым вы выходите в сеть. Узнать свой адрес можно на сайте inet.from.sh.
В форме можно указывать в том числе и IP-адреса с символом % в октетах. К примеру, для разграничения доступа с адресов одной подсети:
Теперь вы можете подключаться к базе данных на сервере хостинга с вашего компьютера. Для подключения используйте следующие настройки:
- сервер для подключения: имя вашего домена, например yourdomain.ru;
- порт для подключения: 3306;
- имя пользователя и пароль: установленные вами при создании базы данных имя пользователя и пароль.
Пример подключения с помощью программы mysql (пароль будет запрошен при подключении):
mysql -P 3306 -h yourdomain.ru -u mylogin_user -p mylogin_db
Безопасное подключение через SSH-туннель
В целях обеспечения безопасности ваших данных используйте подключение к базам данных MySQL через SSH-туннель. Данные передаются по SSH-туннелю в зашифрованном виде, что исключает возможность их перехвата.
Подключение к БД MySQL с компьютера под управлением ОС MS Windows
Настройка SSH-туннеля
Установите на ваш компьютер программу putty. Это бесплатное программное обеспечение, скачать ее можно на официальном сайте.
В категории настроек «Session» в поле «Имя хоста» (Host Name) укажите домен вашего сайта.

Перейдите в категорию настроек Connection → SSH → Tunnels и в поле «Source port» укажите значение 3306, в поле «Destination» — localhost:3306.

После этого нажмите кнопку «Add».

После этого нажмите кнопку «Open». Установится соединение с вашим хостом.
В качестве логина и пароля используйте ваши данные для входа в Панель управления хостингом.
Туннель установлен. Для соединения с базой данных используйте имя пользователя и пароль, заданные вами при создании базы данных в разделе Панели управления «Базы данных». В качестве адреса сервера используйте 127.0.0.1, порт для подключения 3306.
Пример подключения с помощью программы mysql (пароль будет запрошен при подключении):
mysql -P 3306 -h 127.0.0.1 -u mylogin_user -p mylogin_db
Внимание: если на вашем компьютере уже работает сервер баз данных MySQL, подключение удаленному серверу по порту 3306 будет невозможно. В этом случае при создании подключения в putty укажите другой порт в качестве «Source port», например, 3307. Используйте этот порт при подключении к базе данных.
Подключение к БД MySQL с компьютера под управлением ОС Linux
В командной строке выполните следующую команду:
ssh -L3306:localhost:3306 -n yourlogin@yourdomain.ru
- 3306 (сразу после ключа -L) — порт на локальном компьютере, к которому вы сможете подключаться клиентом mysql;
- yourlogin — имя вашего аккаунта (логин в Панели управления);
- yourdomain.ru — имя вашего сайта.
В качестве пароля используйте пароль для входа в Панель управления хостингом.
Туннель установлен. Для соединения с базой данных используйте имя пользователя и пароль, заданные вами при создании базы данных в разделе Панели управления «Базы данных». В качестве адреса сервера используйте 127.0.0.1, порт для подключения 3306.
Пример подключения с помощью программы mysql (пароль будет запрошен при подключении):
mysql -P 3306 -h 127.0.0.1 -u mylogin_user -p mylogin_db
Внимание: если на вашем компьютере уже работает сервер баз данных MySQL, подключение удаленному серверу по порту 3306 будет невозможно. В этом случае при запуске ssh сразу после ключа -L укажите альтернативный порт, например, 3307. Используйте этот порт при подключении к базе данных.
Проверка соединения с БД MySQL
Проверить соединение с БД можно посредством утилиты telnet. Войдите в интерфейс командной строки (в ОС MS Windows: Пуск → Выполнить → cmd.exe), наберите команду:
telnet 127.0.0.1 3306
Если соединение установлено, процедуру настройки туннеля можно считать завершенной. В противном случае необходимо тщательно проверить настройки, убедиться в отсутствии сетевых проблем и связаться со службой технической поддержки.
Подключение и работа с MySQL в среде Visual C++
Совсем недавно мне необходимо было написать программу для удаленной работы с мускулом. В интернете, как не обидно, нашел лишь «скачайте бла-бла, подключите через include, и вот пример!». На практике не сработало, пришлось искать специалистов чтоб объяснили. Для исправления этого досадного отсутствия информации, выложу полное описание от «А» до «Я» по настройке и работе в среде Visual C++. Итак, приступим!
Данным образом настраивал Visual C++ 2008 и 2010. Т. к. особой разницы в интерфейсе разных версий визуалки нету, то и настройка проходит практически одинаково.
Для того что бы подключить БД, такую как мускул, и играться с ней на чистом API, нужно сначала установить или что бы было установлено такое ПО:
1. «Connector/C++»для 32-х розрядного приложения 32-х розрядный набор библиотек, а для 64-х соответственно 64-х битный набор (скачать можно здесь http://dev.mysql.com/downloads/connector/cpp/ ).
2. Дистрибутив мускула, у меня стоит MySQL Community Server 5.1.59 при установке нужно выбрать либо полную установку, либо выбрать самому весь набор, ну для разработки хватит набора DevCpp.Теперь, у нас есть все библиотеки нужные для создания программы на Visual C++. Далее мы проверяем структуру наших директорий сервера мускула. У меня сервер установлен в D:\программирование\MySQL Server 5.1. Директория может быть произвольной, но в ней обязательно должны присутствовать папки include и lib. Далее копируем все файлы из C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt (папка с установленным коннектором) в D:\программирование\MySQL Server 5.1\lib\opt (папка с сервером).
Перекидывания файлов окончены, теперь настроим сам С++:
1. Открываем Visual C++, создаем стандартный консольный проект, сохраняем в любое удобное место.
2. Обязательно (. ) выбираем режим постройки проекта Release. Если выбрать стандартный Debug, то нужно файлы сохранять в другие директории.
3. Открываем свойства проекта (в окне обозревателя решений правой кнопкой по проекту — свойства).
4. Выбираем «Свойства конфигурации — С/С++ — Общие — Дополнительные каталоги включаемых файлов», добавляем каталог include из папки с сервером (в моем случае D:\программирование\MySQL Server 5.1\include).
6. В свойствах проекта выбираем пункт «Свойства конфигурации — С/С++ — Компоновщик — Общие — Дополнительные каталоги библиотек», добавляем каталог lib/opt (в моем случае D:\программирование\MySQL Server 5.1\lib\opt).
7. В свойствах проекта выбираем пункт «Свойства конфигурации — С/С++ — Компоновщик — Ввод — Дополнительные зависимости», добавляем 2 значения mysqlcppconn-static.lib и libmysql.lib.
8. В свойствах проекта выбираем пункт «Свойства конфигурации — С/С++ — Препроцессор — Определения препроцессора», добавляем значение CPPCONN_PUBLIC_FUNC=.
9. Сохраняем свойства проекта.Далее все, что остается это дописать в проект #include , и можно работать!
Вот 2 простых примера работы с мускулом:
Тест подключения к БД
#include «stdafx.h»
#include
#include
#include
#include
#includeusing namespace std;
int _tmain(int argc, _TCHAR* argv[])
MYSQL *conn;
// Получаем дескриптор соединения
conn = mysql_init(NULL);
if(conn == NULL)
// Если дескриптор не получен – выводим сообщение об ошибке
fprintf(stderr, «Error: can’tcreate MySQL-descriptor\n»);
//exit(1); //Если используется оконное приложение
>
// Подключаемся к серверу
if(!mysql_real_connect(conn, «localhost», «root», «root», «test», NULL, NULL, 0))
// Если нет возможности установить соединение с сервером
// базы данных выводим сообщение об ошибке
fprintf(stderr, «Error: can’tconnecttodatabase %s\n», mysql_error(conn));
>
else
// Если соединение успешно установлено выводим фразу — «Success!»
fprintf(stdout, «Success!\n»);
>
// Закрываем соединение с сервером базы данных
mysql_close(conn);Вывод на экран данных из таблицы
#include»stdafx.h»
#include
#include
#include
#include
#includeint_tmain(intargc, _TCHAR* argv[])
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;// Получаем дескриптор соединения
conn = mysql_init(NULL);
if(conn == NULL)
// Если дескриптор не получен – выводим сообщение об ошибке
fprintf(stderr, «Error: can’tcreate MySQL-descriptor\n»);
//exit(1); //Если используется оконное приложение
>
// Подключаемся к серверу
if(!mysql_real_connect(conn, «localhost», «root», «root», «test», NULL, NULL, 0))
// Если нет возможности установить соединение с сервером
// базы данных выводим сообщение об ошибке
fprintf(stderr, «Error: can’tconnecttodatabase %s\n», mysql_error(conn));
>
else
// Если соединение успешно установлено выводим фразу — «Success!»
fprintf(stdout, «Success!\n»);
>mysql_set_character_set(conn, «utf8»);
//Смотрим изменилась ли кодировка на нужную, по умалчанию идёт latin1
coutmysql_query(conn,»SELECT id, text FROM mnu»); //Делаем запрос к таблице по имени МНУ =)
// Закрываем соединение с сервером базы данных
mysql_close(conn);P. S. Спасибо Владимиру Будило за разъяснение темы, эта статья вышла благодаря его объяснениям.