Евгений Загородний
Использование MySQL C API в среде KDevelop
Как известно, связь с 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; }
Ссылки
Официальная документация по MySQLFAQ по KDevelop
Последние комментарии:
Материал | smitt |
---|---|
Исключительно полезен) | |
nikita | |
Ошибка в коде небольшая: Нужно: MYSQL_ROW row = mysql_fetch_row(result); вместо MY_SQL_ROW row = mysql_fetch_row(result); |
|
Zag | |
Один из примеров – «обучение» алгоритма категоризации, т. е. алгоритма, который для разных текстов выбирает из множества известных категорий одну – ту, к которой этот текст больше всего подходит. «Обучение» таких алгоритмов представляет собой следующее: задается выборка текстов, для каждого из которых уже известна категория, к которой он относится. Все эти тексты по очереди «скармливаются» обучающему алгоритму, и каждый из них определенным образом изменяет численные характеристики, которые будут в дальнейшем использоваться для категоризации. Собственно, процесс подсчета этих численных характеристик и есть ресурсоемким (учитывая большое количество текстов на входе). |
|
Роман | |
А можно попросить привести пример ресурсоемких вычислений, основанных на содержимом БД, для которых PHP может оказаться непроизводительным. Спасибо. |
|
Обсудить (комментариев: 4)