Как стать автором
Обновить

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

Время на прочтение4 мин
Количество просмотров54K
Совсем недавно мне необходимо было написать программу для удаленной работы с мускулом. В интернете, как не обидно, нашел лишь «скачайте бла-бла, подключите через 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. Спасибо Владимиру Будило за разъяснение темы, эта статья вышла благодаря его объяснениям.
Теги:
Хабы:
0
Комментарии10

Публикации

Изменить настройки темы

Истории

Ближайшие события

PG Bootcamp 2024
Дата16 апреля
Время09:30 – 21:00
Место
МинскОнлайн
EvaConf 2024
Дата16 апреля
Время11:00 – 16:00
Место
МоскваОнлайн
Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн