...
...

Не вебом единым жива MySQL

Не вебом единым жива MySQL

Система управления базами данных (СУБД) MySQL давно пользуется заслуженной популярностью в среде веб-программистов и в связке с PHP образует мощный инструмент, позволяющий решать самые сложные задачи, возникающие перед создателями сайтов. Однако оставим в покое веб-программирование, сегодня я хотел бы рассказать о том, как писать Windows-приложения, использующие эту СУБД.

Перед началом разработки программы следует убедиться в наличии необходимого программного обеспечения (ПО). Во-первых, должна быть установлена сама СУБД. Я не буду подробно останавливаться на установке MySQL: этой теме не раз уделялось внимание на полосах КГ, скажу лишь, что дистрибутив ее можно получить с официального сайта разработчика www.mysql.com. Распространяется MySQL в соответствии с лицензией GPL (бесплатно для некоммерческого использования). Во-вторых, нам понадобится компилятор языка программирования. Быть может, Visual C++ 6.0 и не самое лучшее средство для работы с базами данных, но мой выбор пал именно на него. Об остальном ПО, которое потребуется, я расскажу по ходу дела.

В своих дальнейших рассуждениях я буду исходить из того, что MySQL установлена по умолчанию в папку "C:\mysql\", а Visual C++ — опять же, по умолчанию — в C:\Program Files\ Microsoft Visual Studio\Vc98\.
Создадим базу данных. Для этого необходимо перейти в каталог c:\mysql\bin\ и выполнить команду mysqladmin create mybase, где mybase — имя создаваемой базы данных. Если возникнут ошибки, проверьте, запущен ли сервер базы данных (mysqld.exe). Следующий шаг — запуск mysql.exe.

На экране должна появиться подсказка mysql >, говорящая о готовности СУБД принимать команды пользователя. Выполним следующую последовательность команд:

mysql > USE mybase;
mysql > CREATE TABLE friends (name VARCHAR(25), phone VARCHAR(10), email VARCHAR(20)) ;
mysql > INSERT INTO friends (name, phone, email) VALUES
('vasja', '232-43-65', 'vasja@tut.by'),
('sasha', '264-43-78', 'sasha@tut.by'),
('masha', '270-93-17', 'vasja@tut.by');

Для того, чтобы увидеть плоды нашей работы, введем команду
mysql > SELECT * FROM friends;

Если вы созерцаете на экране монитора таблицу friends и три строки с данными, то можете со спокойной душей набирать quit — создание базы данных успешно завершено.

Для того, чтобы получить доступ к базе данных из "Си"-программы, можно использовать либо функции MySQL API, либо ODBC-драйвер. Рассмотрим первый вариант.
Скопируем файлы, находящиеся в каталоге C:\mysql\include\, в каталог C:\Program Files\Microsoft Visual Studio\Vc98\Include. Далее копируем файл C:\mysql\lib\opt\libMySQL.dll в системный каталог (для Windows 9x по умолчанию это каталог с:\windows\system\), а оставшиеся файлы из каталога C:\mysql\lib\opt\ в C:\Program Files\Microsoft Visual Studio\Vc98\Lib.
После того как все приготовления проведены, запускаем Visual C++ и создаем консольное приложение (Win32 Console Application). Вводим текст программы:

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>

MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;

int main()
{
int i = 0;

if (!(mysql_connect(&mysql,"lo-calhost","",""))) {
fprintf(stderr, "%s\n", mysql_ error(&mysql));
exit(1);
}

if (mysql_select_db(&mysql,"myba- se")) {
fprintf(stderr, "%s\n", mysql_ error(&mysql));
exit(2);
}

if (mysql_query(&mysql,"SELECT * FROM freinds")) {
fprintf(stderr, "%s\n", mysql_ error(&mysql));
exit(3);
}

if (!(res = mysql_store_result (&mysql))) {
fprintf(stderr, "%s\n", mysql_ error(&mysql));
exit(4);
}

while((row = mysql_fetch_row (res))){
for (i=0 ; i < mysql_num_fields (res); i++)
printf("%s\t",row[i]);
printf("\n");
}

if (!mysql_eof(res)) {
fprintf(stderr, "%s\n", mysql_ error(&mysql));
exit(5);
}

mysql_free_result(res);
mysql_close(&mysql);
}

Перед сборкой проекта необходимо подключить библиотеку libmysql.lib. Для этого выбираем пункт меню Project — Settings и на вкладке Link в конец строки Oject/Library Modules добавляем libmysql.lib. Теперь можем смело жать F7 и запускать нашу программу на выполнение. На экран монитора должен вывестись список друзей с телефонами и адресами электронной почты, содержащийся в созданной нами ранее базе данных.
Для начинающих программистов прокомментирую вышеприведенную программу. Чтобы установить соединение с СУБД, вызывается функция mysql_connect(). Она описана следующим образом:

MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd),
где *mysql — указатель на структуру MYSQL;
*host — указатель на строку, содержащую адрес компьютера в сети, на котором установлена СУБД (в нашем случае СУБД установлена на локальном компьютере);
*user — указатель на строку, содержащую имя пользователя (если не задано, подразумевается текущий пользователь);
*passwd — указатель на строку, содержащую пароль.

Функция возвращает указатель на структуру MYSQL, если удалось установить соединение с базой данных, и NULL в противном случае. Тип ошибки можно получить, используя функцию mysql_error().
Далее следует выбрать базу данных с помощью функции:

int mysql_select_db(MYSQL *mysql, const char *db).

*mysql здесь указатель, полученный функцией mysql_connect(), а *db — указатель на строку с именем базы данных.

После того, как база данных выбрана, можно посылать sql-запрос на выборку данных, для чего применяется функция int mysql_query (MYSQL *mysql, const char *query), где *query — указатель на строку, содержащую запрос. В случае успешного выполнения операции функция возвращает 0.
Затем вызываем функцию MYSQL_ RES *mysql_store_result (MYSQL *mysql), которая передает результат запроса клиенту. В случае успеха она возвращает указатель на структуру MYSQL_ RES, если произошла ошибка или данных для выборки нет — NULL. После того, как полученные данные больше не нужны, требуется освободить занимаемую ими память вызовом функции void mysql_free_result (MYSQL_RES *result).
Для получения строки данных из результата запроса применяем функцию MYSQL_ROW mysql_fetch_row (MYSQL_RES *mysql). Она вернет NULL, когда строки закончатся. Количество полей в строке получаем функцией int mysql_num_fields (MYSQL_RES *result). Функция int mysql_eof (MYSQL_RES *) вернет ненулевое значение, если достигнут конец набора результатов.

После окончания работы с базой данных вызовом функции mysql_ close (MYSQL *mysql) закрываем соединение с СУБД. Конечно, MySQL API не ограничивается лишь приведенными мной функциями: на самом деле их гораздо больше — я упомянул только те, без которых не может обойтись ни одно приложение.
Если помните, в начале статьи я сказал, что работать с базой данных можно используя ODBC-драйвер. Что же такое ODBC?
Open Database Connectivity (ODBC) — открытый интерфейс доступа к базам данных, позволяющий приложению обращаться к различными СУБД с помощью структурированного языка запросов SQL. Применение ODBC позволяет программисту писать приложения, не зависящие от архитектуры конкретной СУБД. Будь то MySQL, MS Access или Oracle — для разработчика не имеет принципиального значения, ведь работа с ними ведется совершенно одинаково.

Для того, чтобы написать приложение для работы с СУБД MySQL через ODBC, необходимо установить MyODBC-драйвер, получить который можно на странице http://www.mysql.com/downloads/api-myodbc.html, где следует искать желательно последнюю версию для Windows. Для тех, кому лень это делать, привожу прямую ссылку на мой сайт: http://www.bizkit.nm.ru/man/download/myodbc.exe .
После установки данного драйвера необходимо создать источник данных. Идем в Панель управления, выбираем Источники данных ODBC, и перед нами открывается окно Администратора источников данных ODBC. Нажимаем кнопку Добавить… и в окне Создание нового источника данных выбираем MySQL ODBC 3.51 Driver (номер версии драйвера может отличаться). В следующем окне введите имя источника данных (Data Source Name). Заполнение оставшихся полей не должно вызвать затруднений у человека, хоть раз в жизни настраивавшего СУБД, поэтому приводить описание этих действий не считаю необходимым. Нажатием кнопки Test Data Source проверяем доступность источника данных и, если все в порядке, можем приступать к написанию кода программы.

Дальнейший процесс создания приложения не зависит от конкретной базы данных и достаточно хорошо описан в литературе по программированию. Таким образом, СУБД MySQL можно применять не только в Internet, но и в небольшой локальной сети или даже в одном компьютере, и для это необязательно использовать веб-интерфейс.
В заключение хочется сказать, что автор не считает MySQL панацеей от всех бед и ни в коем разе не агитирует разработчиков ПО переключиться исключительно на ее использование. MySQL — это всего лишь СУБД, со своими достоинствами и недостатками. Выбор, как всегда, за вами.

Sasha Volovod, udly@tut.by


© Компьютерная газета

полезные ссылки
Аренда ноутбуков