Установка соединения с СУБД MySQL по существу является двухшаговым процессом. Первый шаг заключается в вызове функции mysql_init() для инициализации структуры MYSQL. Эта структура служит своеобразной стартовой точкой для всех будущих взаимодействий с сервером.
Листинг 19.5.
mysql_init(&mysql);
Затем для установки соединения с сервером используется функция mysql_real_ connect() .
Листинг 19.6.
mysql_real_connect(&mysql, "localhost", "joe", "secret",
"db1", 0, NULL, 0);
Как видно из предыдущего фрагмента, функции mysql_real_connect() передается несколько различных аргументов, необходимых для успешной установки соединения: структура MYSQL, предварительно инициализированная функцией mysql_init() , имя узла, на котором работает сервер MySQL, имя и пароль пользователя, необходимые для регистрации на сервере, и имя используемой базы данных.
Меняя мнение
Обычно база данных, на которой будут выполняться ваши запросы, задается во время подключения к серверу с помощью функции mysql_real_connect(). Однако базу данных можно поменять в любой момент с помощью функции mysql_ select_db(), которая, собственно, принимает в виде аргумента имя базы данных:
/* выбрать новую базу данных "db678" */ mysql_select_db(&mysql, "db678");
При установке успешного соединения, эта функция возвращает дескриптор соединения. Этот дескриптор используется для всех последующих обменов данными с базой данных. В случае сбоя соединения, что вероятно из-за ошибочных параметров регистрации или неверного имени узла, функция возвратит значение "ложь". Неплохо в данном случае проверить возвращаемое значение этой функции в сценарии перед продолжением работы алгоритма, как показано в следующей простой программе.
Листинг 19.7.
#include <stdio.h> #include <mysql.h> int main()
{
/* объявление структуры MYSQL */ MYSQL mysql;
/* инициализация структуры */ mysql_init(&mysql);
/* попытка подключения и распечатка сообщения */
if (!mysql_real_connect(&mysql, "localhost", "tim", "abracadbra",
"mysql", 0, NULL, 0);
{
printf("Невозможно подключиться к серверу MySQLn");
}
else
{
printf ("Соединение прошло успешно n") ;
}
/* закрыть соединение и очистить */ mysql_close(&mysql);
}
Здесь функция mysql_real_connect() пробует открыть соединение с базой данных, используя при этом параметры доступа, заданные в вызове функции. Если это действие завершается успешно и возвращает значение "истина", печатается соответствующее сообщение. В противном случае (попытка соединения не удалась) возвращается значение NULL и печатается сообщение об ошибке. Сбой в работе функции mysql_real_ connect() может быть вызван рядом причин. В руководстве по MySQL, имеющемся по адресу http://www.mysql.com/, дан перечень всех этих причин и кодов ошибок, а также примеры по обработке этих ошибок. В предыдущем примере для простоты в коде были жестко запрограммированы имя базы данных, имя пользователя и его пароль. В последующих примерах будет использоваться более традиционный подход, позволяющий считывать эти параметры из конфигурационного файла или командной строки.
Соединение можно разорвать с помощью функции mysql_close() , передав ей структуру, созданную функцией mysql_init() .
Листинг 19.8.
mysql_close(&mysql); Вглядываясь пристальнее
Вероятно, вы заметили, что в приведенном примере функции mysql_real_ connect() передается восемь аргументов, а не пять, которые были только что описаны. Дополнительными тремя аргументами являются:
• порт, используемый для подключения к серверу MySQL;
• разъем, используемый для подключения к серверу MySQL;
• один (и более) необязательный флаг, используемый для управления поведением клиента.
В большинстве случаев не стоит беспокоиться об этих трех аргументах, т.к. обычно используются их значения, принятые по умолчанию (как в примерах этой главы). Но если вы хотите узнать о них больше, полистайте руководство по MySQL.
Если в вашей программе используются новые возможности поддержки транзакций MySQL 4.1, для включения/отключения режима автовыполнения MySQL примените функцию mysql_autocommit() .
Еще одной хорошей идеей является вызов функции mysql_commit() или mysql_ rollback() перед вызовом mysql_close() . Это позволит завершить транзакцию полностью.
Листинг 19.9.
mysql_autocommit(&mysql, 0); /* выключить режим автовыполнения */ /* выполнить транзакцию */ if (success) {
mysql_commit(&mysql); /* выполнить транзакцию */ } else {
mysql_rollback(&mysql); /* откат транзакции */
}
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Управление соединением
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. MySQL and C. Новые возможности | Все о MySQL. Выполнение запроса |