Топ контрибуторов
loading
loading
Знаете ли Вы, что

Лучшие IT работодатели регулярно просматривают рейтинги и профили пользователей в поисках кандидатов. Для корректного отображения ваших данных рекомендуем заполнить ваш профиль и добавить информацию о вас и вашей профессии.

Лента обновлений
ссылка Oct 22 23:24
Комментарий от alexcei88:
В вопросе переменная s даже не выводиться, а выводитьс...
ссылка Oct 22 17:46
Комментарий от AlexFurm:
Это UB, так можно вызывать только статические функции ч...
ссылка Oct 22 17:43
Комментарий от AlexFurm:
Любые битовые операции с signed это UB
ссылка Oct 21 20:30
Комментарий от yoori:
Любой вариант скомпилируется если компилировать не в конеч...
ссылка Oct 21 16:53
Добавлен вопрос в тест QA (Quality Assurance)
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 443368 / 2177510.

Взаимодействие C++ с MySQL

head tail Статья
категория
C++
дата05.12.2012
авторflenderbit
голосов0
1. Вступление
2. Настройка используемых компонентов
3. Тестовый пример
    3.1 Создание тестовой БД
    3.2 Создание тестовой программы
    3.3 Результаты исполнения программы
4. Перечень ссылок на источники
    

1. Вступление

    В наше время трудно себе представить какой небудь Web-проект, в котором бы не использовалась,
если не распределённая, то простая база данных. При этом нельзя не заметить тот факт, что уже  давно
нету чётких границ между Desktop-программированием и Web-программированием. То есть, используя
современные среды разработки ПО, можно, как говорится "лёгким движением руки" спроектировать
клиенскую программу, которая будет проделывать какую-то очень важную социально-ненужную работу,
связываясь время от времени с базой данных, записывая в нее свои результаты работы.
    В данной статье описывается взаимодействие C++ с MySQL. Для демонстрации такого действия
использовались следующие компоненты:
  • Microsoft Visual C++ 2010 Express
  • MySQL Server 5.1
  • mysql-connector-c++-noinstall-1-1.1.0-win32.zip

2. Настройка используемых компонентов

    После того, как загрузилась среда разработки 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
  • Задать пароль администратора, если до этого времени он не был задан

3. Тестовый пример

3.1 Создание тестовой БД

    Сначала нужно убедится в том, что запущен 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>

3.2 Создание тестовой программы

      Текст программы указан ниже:
   
          #include <iostream>
          #include <mysql.h>
          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(&amp;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 <winsock2.h> после строк #ifndef _mysql_com_h и #define _mysql_com_h в начале файла mysql_com.h.

3.3 Результаты исполнения программы

      Что же касается результатов, то их можно записать в нескольких строчках:

      d:\vcproj\mysqltest\Release>mysqltest.exe
      Number of active users : 2

      d:\vcproj\mysqltest\Release>
    
      Вывод из этого следует один - вот так достаточно просто и легко можно "подружить" C++ с MySQL.

4. Перечень ссылок на источники


Если Вам понравилась статья, проголосуйте за нее

Голосов: 0  loading...