Яндекс.Метрика

    Песочница

    Подключение и работа с MySQL в среде Visual C++

    Совсем недавно мне необходимо было написать программу для удаленной работы с мускулом. В интернете, как не обидно, нашел лишь «скачайте бла-бла, подключите через include, и вот пример!». На практике не сработало, пришлось искать специалистов чтоб объяснили. Для исправления этого досадного отсутствия информации, выложу полное описание от «А» до «Я» по настройке и работе в среде Visual C++. Итак, приступим!

    Для того что бы подключить БД, такую как мускул, и играться с ней на чистом 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<mysql.h>, и можно работать!

    Вот 2 простых примера работы с мускулом:

    Тест подключения к БД
    #include "stdafx.h"
    #include <iostream.h>
    #include <conio.h>
    #include <stdlib.h>
    #include<mysql.h>

    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);

    system("Pause");
    return 0;
    }


    Вывод на экран данных из таблицы
    #include"stdafx.h"
    #include#include<conio.h>
    #include<stdlib.h>
    #include<mysql.h>

    usingnamespacestd;

    int_tmain(intargc, _TCHAR* argv[])
    {

    system("cls");

    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    int i = 0;

    // Получаем дескриптор соединения
    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<<"connectioncharacterset: "<<mysql_character_set_name(conn) <<endl;

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

    if (res = mysql_store_result(conn)){
    while(row = mysql_fetch_row(res)) {
    for (i=0 ; i <mysql_num_fields(res); i++){
    std::cout<<row[i] <<"\n"; //Выводим все что есть в базе через цикл
    }
    }
    } elsefprintf(stderr, "%s\n", mysql_error(conn));

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

    system("Pause");

    return 0;
    }

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