После ознакомления с основами C API-интерфейса MySQL, воспользуемся полученными знаниями. В этом разделе продемонстрировано использование API-интерфейса MySQL для решения реальных задач, для этого создадим на ЯП C две программы: интерактивный SQL-клиент, аналогичный тому, который поставляется в дистрибутиве MySQL, и программу учета расходов, использующую MySQL в качестве среды хранения данных об индивидуальных расходах.
Интерактивный SQL-клиент
Вы уже наверняка знакомы с клиентом mysql, который работает с командной строкой и поставляется в дистрибутиве MySQL. (Он упоминался практически в каждой главе этой книги при демонстрации различных аспектов работы этой реляционной СУБД). В принципе это довольно простая программа. Она подключается к серверу MySQL, (при этом параметры соединения задаются аргументами командной строки), ожидает ввода команд от пользователя и отправляет введенные данные на сервер для их обработки. Если введенные данные не содержат ошибок, сервер обрабатывает их и возвращает клиенту результирующий набор (для запросов типа "SELECT") или значение, обозначающее успешное или неуспешное завершение операции (для запросов типа "не SELECT"). Потом клиент обрабатывает данные соответствующим образом: отображается диагностическое сообщение, обрабатывается и форматируется результирующий набор (если таковой имеется), или данные используются каким-либо другим образом.
Понятно, что решить эти задачи можно с помощью функций, имеющихся в составе API-интерфейса MySQL. Так как API-интерфейс выполняет большую часть этой работы, создать клиент командной строки, повторяющий ту же функциональность, что и стандартный клиент mysql , не представляет большого труда.
Ниже представлен исходный текст.
Если вы уже более-менее знакомы с программированием на C, эта задача не должна вызывать у вас никаких затруднений. Сначала программа просматривает информацию о том, к какому узлу и базе данных необходимо подключиться, а также какой пользователь и пароль должны быть для этого использованы. Эта информация передается пользователем через командную строку при вызове программы. Элементарная проверка ошибок подскажет пользователю правильный синтаксис в случае отсутствия аргумента.
Далее, функция mysql_real_connect() берет на себя "заботы" по подключению к базе данных. Предположим, что соединение выполнено. В цикле выводится подсказка, и программа ожидает ввода пользователя в виде команды SQL (это интерактивная часть программы). Ввод, произведенный пользователем, отправляется на SQL-сервер для обработки. Для этого используется функция mysql_query() (когда пользователь вводит слово "exit", программа выходит из цикла, закрывает соединение и завершает свою работу).
В зависимости от того, возвращает ли запрос результирующий набор, она выводит список полей и записей, созданный с использованием функций mysql_fetch_field() и mysql_fetch_row() , или распечатывает счетчик общего количества строк, задействованных запросом, полученный с помощью функции mysql_affected_rows(). На каждом этапе гарантирована распечатка информации об ошибке на стандартное устройство вывода в случае ее возникновения.
Предлагаем вашему вниманию несколько примеров использования этого клиента.
Листинг 19.27.
[user@host]$ ./client.bin
Запуск: ./client.bin <узел> <пользователь> <пароль> [user@host]$ ./client.bin localhost root ""
Ошибка соединения: Access denied for user: 'root@localhost' [user@host]$ ./client.bin localhost root master запрос? SHOW DATABASES
[Database] db1
inventory
mysql
test
** Запрос обработан успешно, выбрано 4 строки ** запрос? SHOW TABLES FROM DB1
[Tables_in_db1] categories data
employees logs
** Запрос обработан успешно, выбрано 4 строки ** запрос ? USE db1 (Using password: YES)
** Запрос обработан успешно, обработано 0 строк ** запрос? SELECT * FROM employees [id], [name], [dept], [comp] 103, Miles D, Engineering, 67550.00 105, Susan J, Engineering, 73000.00
126, Joe T, Legal, 90000.00
127, John D, HR, 41000.00 134, Ingrid F, HR, 43600.00
** Запрос обработан успешно, обработано 5 строк ** запрос? SELECT id, name FROM employees WHERE camp > 70000
[id], [name] 105, Susan J 126, Joe T
** Запрос обработан успешно, обработано 2 строк **
запрос? UPDATE employees SET comp = comp + 5000 WHERE camp < 50000
** Запрос обработан успешно, обработано 2 строк ** запрос? SELECT nothing
Ошибка в запросе: Unknown column 'nothing' in 'field list' запрос ? exit [user@host]$
ТОП-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. Практическое применение C API-интерфейса MySQL
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Обработка ошибок | Все о MySQL. Учет расходов |