Подключение и работа с 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<mysql.h>, и можно работать!

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

Тест подключения к БД
#include "stdafx.h"
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <mysql.h>
#include<stdio.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<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.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. Спасибо Владимиру Будило за разъяснение темы, эта статья вышла благодаря его объяснениям.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 10

    +2
    А можно в 2-х словах пояснить, какова именно цель данной статьи? Скопировать все возможные мануалы и статьи на Хабр или ещё что?
      +1
      Данную статейку нигде не видел, не копировал. Писал сам. Из личного опыта поиска знаю, что нигде толком не описано мануала от «А» до «Я» по настройке этих функций хоть на каком-нибудь языке для использования через API. Думаю кому-то да пригодится.
        +1
        Попробуйте самый первый результат небезызвестного поисковика на запрос «mysql api tutorial»
          –1
          По данному запросу проверил даже первый десяток выдачи… Ни в одном ответе не нашел описание как настраивать свойства проекта. Мало того, даже не нашел об этом упоминания. Но без этого проект не есть работоспособным, как не странно. На это вы внимания не обратили?
            +1
            Дело в том, что конфигурация Visual C++ напрямую не относится к mysql, т.к. схожий набор действий вы бы совершали для pgsql, openssl или ещё чего.
            Ещё, если уж речь пошла о настройке Visual C++, то было бы неплохо указать версию.
              0
              На счет версии дополнил мануал.
      0
      iostream.h, conio.h, fprintf(...) + C++ = does not compute.
        –1
        iostream, conio, в зависимости от версии системы программирования и расположения заголовочных файлов, могут обьявляться по-разному (возможно нужно писать без .h, возможно записать в двойных кавычках).
        Для использования fprintf необходимо подключить директиву stdio.h (опечатка в мануале, будет исправлено).
        +1
        Конечно здорово, но не лучше ли, для этих целей, использовать ORM
          0
          Впервые вижу этот инструмент. Спасибо за подсказку, посмотрю.

        Only users with full accounts can post comments. Log in, please.