Как подключиться к бд mysql из c
Перейти к содержимому

Как подключиться к бд mysql из c

  • автор:

Краткое руководство. Использование Подключение 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 уже установлена на вашем компьютере, то вы можете пропустить следующие два шага.
    1. Скачайте установщик Visual Studio 2019.
    2. Запустите установщик и выполните указанные действия, чтобы завершить установку.

Настройка Visual Studio

  1. В Visual Studio выберите «Проект -> Свойства -> Компоновщик -> Общие -> Дополнительные каталоги библиотек» и добавьте каталог lib\opt соединителя C++ (например, C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.9\lib\opt).
  2. Из Visual Studio проект —> свойства —> C/C++ —> общие —> дополнительные каталоги включения:
    • Добавьте каталог \include соединителя C++ (например, C:\Program Files (x86)\MySQL\MySQL Connector C++ 1.1.9\include).
    • Добавьте корневой каталог библиотеки Boost (например, C:\boost_1_64_0).
  3. В Visual Studio выберите «Проект -> Свойства -> Компоновщик -> Ввод -> Дополнительные зависимости» и добавьте в текстовое поле mysqlcppconn.lib.
  4. Скопируйте файл mysqlcppconn.dll из папки библиотеки соединителя C++, указанной на шаге 3, в каталог, где хранится исполняемый файл приложения, или добавьте его в переменную среды, чтобы приложение смогло найти его.

Получение сведений о подключении

Получите сведения о подключении, необходимые для подключения к базе данных Azure.для MySQL. Вам потребуется полное имя сервера и учетные данные для входа.

Azure Database for MySQL server name

  1. Войдите на портал Azure.
  2. В меню слева на портале Azure щелкните Все ресурсы и выполните поиск по имени созданного сервера (например, mydemoserver).
  3. Щелкните имя сервера.
  4. Запишите имя сервера и имя для входа администратора сервера с панели сервера Обзор. Если вы забыли свой пароль, можно также сбросить пароль с помощью этой панели.

Подключение, создание таблицы и вставка данных

Используйте приведенный ниже код для подключения и загрузки данных с помощью инструкций 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
    #include

    using 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
    #include

    int_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
    cout

    mysql_query(conn,»SELECT id, text FROM mnu»); //Делаем запрос к таблице по имени МНУ =)

    // Закрываем соединение с сервером базы данных
    mysql_close(conn);

    P. S. Спасибо Владимиру Будило за разъяснение темы, эта статья вышла благодаря его объяснениям.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *