Хотите прямо сейчас получить бесплатный видеокурс по программированию для начинающих?

Как подключить MySQL к вашей программе на С++?

Октябрь 16, 2013

1377900366_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.



Один комментарий к записи Как подключить MySQL к вашей программе на С++?

  1. Виталий on 17.04.2014 at 14:00

    Вопрос: какие файлы в #include?!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Поддержите проект

Хит продаж:

Случайный анекдот

Моя вторая книга

Что это???

Программирование для Android:

Мы вконтакте

Помощь сайту

Понравился сайт? Он сильно нуждается в раскрутке.

Чтобы помочь в раскрутке - опубликуйте ссылку на сайт (или любую его страницу) на любом другом сайте в интернете. Тогда сайт станет чуточку популярнее.

Или просто нажмите на кнопки социальных сетей которые стоят в конце каждой статьи

Вместе мы сможем сделать программирование более популярным и более понятным для всех!

Заранее спасибо!
Артём Кашеваров.