Краткое руководство. Использование Подключение 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 <stdlib.h>
#include <iostream>
#include "stdafx.h"
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/prepared_statement.h>
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 << "Could not connect to server. Error message: " << e.what() << endl;
system("pause");
exit(1);
}
//please create database "quickstartdb" ahead of time
con->setSchema("quickstartdb");
stmt = con->createStatement();
stmt->execute("DROP TABLE IF EXISTS inventory");
cout << "Finished dropping table (if existed)" << endl;
stmt->execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);");
cout << "Finished creating table" << endl;
delete stmt;
pstmt = con->prepareStatement("INSERT INTO inventory(name, quantity) VALUES(?,?)");
pstmt->setString(1, "banana");
pstmt->setInt(2, 150);
pstmt->execute();
cout << "One row inserted." << endl;
pstmt->setString(1, "orange");
pstmt->setInt(2, 154);
pstmt->execute();
cout << "One row inserted." << endl;
pstmt->setString(1, "apple");
pstmt->setInt(2, 100);
pstmt->execute();
cout << "One row inserted." << endl;
delete pstmt;
delete con;
system("pause");
return 0;
}
Чтение данных
Используйте указанный ниже код с инструкцией SQL SELECT для подключения и чтения данных. В коде используется класс sql::Driver с методом connect(), чтобы установить подключение к MySQL. Затем код использует методы prepareStatement() и executeQuery() для выполнения команд SELECT. Далее код использует метод next() для перехода к записям в итоговом наборе. Наконец, с помощью методов getInt() и getString() код проанализирует значения в записи.
Замените параметры Host, DBName, User и Password. Их можно заменить значениями, указанными при создании сервера и базы данных.
#include <stdlib.h>
#include <iostream>
#include "stdafx.h"
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/prepared_statement.h>
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 << "Could not connect to server. Error message: " << e.what() << endl;
system("pause");
exit(1);
}
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 <stdlib.h>
#include <iostream>
#include "stdafx.h"
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/prepared_statement.h>
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 << "Could not connect to server. Error message: " << e.what() << endl;
system("pause");
exit(1);
}
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 <stdlib.h>
#include <iostream>
#include "stdafx.h"
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/prepared_statement.h>
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 << "Could not connect to server. Error message: " << e.what() << endl;
system("pause");
exit(1);
}
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