Как подключить MySQL к вашей программе на С++?
В наше время трудно себе представить какой небудь Web-проект, в котором бы не использовалась,
если не распределённая, то простая база данных. При этом нельзя не заметить тот факт, что уже давно
нету чётких границ между Desktop-программированием и Web-программированием. То есть, используя
современные среды разработки ПО, можно, как говорится «лёгким движением руки» спроектировать
клиентскую программу, которая будет проделывать какую-то очень важную социально-ненужную работу,
связываясь время от времени с базой данных, записывая в нее свои результаты работы.
В данной статье описывается взаимодействие C++ с MySQL. Для демонстрации такого действия
использовались следующие компоненты:
- Microsoft Visual C++ 2010 Express
- MySQL Server 5.1
- mysql-connector-c++-noinstall-1-1.1.0-win32.zip
После того, как загрузилась среда разработки Microsoft Visual C++ 2010 Express,
нужно создать новый пустой проект «Консольное приложение Win32″. Потом устанавливается
«Release» как значение конфигурации решения (Solution configurations). Далее нужно
открыть страницу свойств (Property Pages) с помощью главного меню (Проект->Свойства).[1]
В окне страницы свойств сначала добавляется к параметру
«Дополнительные каталоги включаемых файлов» (Свойства конфигурации->С/С++->Общие)
строка «C:\Program Files\MySQL\MySQL Server 5.1\include», после — к параметру
«Дополнительные каталоги библиотек» (Свойства конфигурации->Компоновщик->Общие)
строка «C:\Program Files\MySQL\MySQL Server 5.1\lib\opt», далее — к параметру
«Дополнительные зависимости» (Свойства конфигурации->Компоновщик->Ввод) прибавить
значения «mysqlcppconn-static.lib» и «libmysql.lib», также к параметру «Определения препроцессора»
(Свойства конфигурации->С/С++->Препроцессор) прибавить значение «CPPCONN_PUBLIC_FUNC=».
Примечание. Файлы mysqlcppconn-static.lib и libmysql.lib (находятся в архиве
mysql-connector-c++-noinstall-1-1.1.0-win32.zip) нужно поместить в каталог
C:\Program Files\MySQL\MySQL Server 5.1\lib\opt.
MySQL-сервер настраивается следующим образом. Запускается мастер настройки конфигурации сервера
(Пуск->Все программы->MySQL->MySQL Server 5.1->MySQL Server Instance Config Wizard) и
в открывшимся окне нужно пошагово выбирать:
- Reconfigure Instance
- Detailed Configuration
- Developer Machine
- Multifunctional Database
- Вибрать диск и путь для хранения БД типа «InnoDB»
- Decision Support (DSS)/OLAP
- Активировать Enable TCP/IP Networking Enable и Strict Mode, порт оставить по умолчанию (3306)
- Standard Character Set
- Активировать Install as Windows Service (если этот сервис был установлен в процессе инсталляции, то этот элемент будет недоступным) и Include Bin Directory in Windows PATH
- Задать пароль администратора, если до этого времени он не был задан
Сначала нужно убедится в том, что запущен MySQL-сервер. Если не запущен, то для того,
чтобы его запустить, нужно запустить сервис MySQL
(Пуск->Панель управления->Администрирование->Службы).
Далее следует запустить командную строку клиента
(Пуск->Все программы->MySQL->MySQL Server 5.1->MySQL Command Line Client).
Чтобы начать работать с клиентом, нужно сначала ввести пароль. Если подключение удалось,
можно создать нехитрую БД с простенькой сохраняемой процедурой.
Ниже приведён текст с командной строки клиента.[2]
Примечание. Все строки, которые начинаются с префиксов mysql> или ->, вводимые пользователем, остальные — ответ от сервера.
mysql> create database cpp_data;
Query OK, 1 row affected (0.00 sec)
mysql> use cpp_data;
Database changed
mysql> create table users(id int, fname varchar(25), sname varchar(25), active bool);
Query OK, 0 rows affected (0.11 sec)
mysql> insert into users values (1, ‘Qwerko’, ‘Purko’, True);
Query OK, 1 row affected (0.05 sec)
mysql> insert into users values (2, ‘Asdfko’, ‘Kurko’, False);
Query OK, 1 row affected (0.01 sec)
mysql> insert into users values (3, ‘Bumko’, ‘Bomko’, True);
Query OK, 1 row affected (0.03 sec)
mysql> delimiter //
mysql> create function user_count() returns int
-> deterministic
-> begin
-> declare c int;
-> select count(*) into c from users where active = True;
-> return c;
-> end
-> //
Query OK, 0 rows affected (0.08 sec)
mysql> delimiter ;
mysql>
Создание тестовой программы
Текст программы указан ниже:
#include #include MYSQL *connection, mysql; MYSQL_RES *result; MYSQL_ROW row; int query_state; int main() { mysql_init(&mysql); //connection = mysql_real_connect(&mysql,"host","user", // "password","database",port,"unix_socket",clientflag); connection = mysql_real_connect(&mysql,"localhost", "root","qwer","cpp_data",3306,0,0); if (connection == NULL) { std::cout << mysql_error(&mysql) << std::endl; return 1; } query_state = mysql_query(connection, "select user_count()"); if (query_state !=0) { std::cout << mysql_error(connection) << std::endl; return 1; } result = mysql_store_result(connection); while (( row = mysql_fetch_row(result)) != NULL) { std::cout << "Number of active users : " << row[0] << std::endl; } mysql_free_result(result); mysql_close(connection); return 0; } |
Примечание. Если после компиляции есть ошибки относительно необъявленного идентификатора SOCKET, то должно помочь добавление строки #include после строк #ifndef _mysql_com_h и #define _mysql_com_h в начале файла mysql_com.h.
Результаты исполнения программы
Что же касается результатов, то их можно записать в нескольких строчках:
d:\vcproj\mysqltest\Release>mysqltest.exe
Number of active users : 2
d:\vcproj\mysqltest\Release>
Вывод из этого следует один — вот так достаточно просто и легко можно «подружить» C++ с MySQL.
Понравилась статья? Жми: | Поделиться в соц. сетях |
Вопрос: какие файлы в #include?!