Песочница →
Подключение и работа с 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 простых примера работы с мускулом:
Тест подключения к БД
Вывод на экран данных из таблицы
Для того что бы подключить БД, такую как мускул, и играться с ней на чистом 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. Спасибо Владимиру Будило за разъяснение темы, эта статья вышла благодаря его объяснениям.
31.10.2011 14:38+0400