developer.co.ua

Holy Copypasters
08.12.2006
Евгений Загородний

Использование MySQL C API в среде KDevelop 0.07

Как известно, связь с MySQL из PHP затруднений не вызывает.
Однако если необходимо провести ресурсоемкие вычисления, основанные на содержимом БД, PHP может оказаться непроизводительным.
В C/C++ встроенной поддержки MySQL нет, поэтому для получения доступа к базе данных необходимо подключить библиотку mysqlclient, которая (к счастью) распостраняется вместе с MySQL.

Предполагается, что имееются установленные FreeBSD, MySQL и KDE c KDevelop.
У меня MySQL установлен в /usr/local/mysql, и именно этот путь я буду использовать здесь. Если у вас MySQL находится в другом месте – просто используйте соответствующие пути.

Итак, по пунктам.

Создаем новый проект

В KDevelop для наших целей подходит шаблон С++ “Simple Hello world program”.
(Project -> New project..., выбираем из дерева C++ -> Simple Hello world program.)

Добавляем путь к библиотеке в конфигурации проекта

Открываем Project -> Porject Options..., на вкладке Configure Options в поле Linker Flags (LDFLAGS) добавляем следующее:
-L/usr/local/mysql/lib/mysql

Подключаем библиотеку mysqlclient

Заходим в Automake Manager, он вызывается кнопкой из вертикального ряда справа.
Открываем окошко опций проекта: правая кнопка на src -> Options...
Во вкладке Compiler в поле Compiler flags for C++ compiler (CXXFLAGS) добавляем:
-lmysqlclient
Замечание: если создавался не проект не C++, а C, то добавлять эту строку нужно в другое поле.

Задаем путь к header-файлу

В том же окне (Subproject Options for 'src'), во вкладке Includes нажимаем Add... возле нижнего поля, и вводим
-l/usr/local/mysql/includes/mysql

Готово!

Теперь можно смело подключать mysql.h и пользоваться функциями MySQL C API. Их подробное описание есть в соответствующем разделе документации по MySQL.

Вот самый простой пример.

#include <cstdlib>
#include <iostream>
#include <mysql.h>

using namespace std;

int main() {
  mysql_server_init(0, NULL, NULL);
  MYSQL* db = mysql_init(NULL);
  mysql_real_connect(db, "localhost", "root", "password", "db_name", 0, NULL, 0);

  // ...здесь делаем с базой данных все, что понадобится
  mysql_query(db, "SELECT * FROM table_name");
  MYSQL_RES* result = mysql_store_result(db);
  MY_SQL_ROW row = mysql_fetch_row(result);
  //row - массив, содержащий значения полей записи
  cout << "1st row, 1st field: " << row[0];
  // и т. д...

  mysql_close(db);
  mysql_server_end();
  return EXIT_SUCCESS;
}

Ссылки

Официальная документация по MySQL
FAQ по KDevelop

1 2 3 4 5

Последние комментарии:

Материал smitt
Исключительно полезен)

nikita
Ошибка в коде небольшая:
Нужно:
MYSQL_ROW row = mysql_fetch_row(result);
вместо
MY_SQL_ROW row = mysql_fetch_row(result);

Zag
Один из примеров – «обучение» алгоритма категоризации, т. е. алгоритма, который для разных текстов выбирает из множества известных категорий одну – ту, к которой этот текст больше всего подходит.

«Обучение» таких алгоритмов представляет собой следующее: задается выборка текстов, для каждого из которых уже известна категория, к которой он относится. Все эти тексты по очереди «скармливаются» обучающему алгоритму, и каждый из них определенным образом изменяет численные характеристики, которые будут в дальнейшем использоваться для категоризации.

Собственно, процесс подсчета этих численных характеристик и есть ресурсоемким (учитывая большое количество текстов на входе).

Роман
А можно попросить привести пример ресурсоемких вычислений, основанных на содержимом БД, для которых PHP может оказаться непроизводительным.

Спасибо.

Обсудить (комментариев: 4)