ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

Все о MySQL. MySQL and C. Новые возможности


28-12-2009

Не совсем понятно, что в конце предыдущей командной строки делает параметр -lz? Причина в том, что новые версии клиентской библиотеки MySQL включают поддержку протокола сжатия для уменьшения объема данных, передаваемых между клиентом и сервером. Эта возможность реализована с помощью библиотеки libz, а значит, если вы не зададите связь с ней (с помощью параметра - lz), редактор связей выдаст последовательность сообщений об ошибке и завершит процесс компиляции.

После завершения компиляции получим двоичный файл sample.bin. Этот файл можно запускать прямо из командной строки. И, если все прошло хорошо, он должен подключиться к серверу MySQL, выполнить запрос и вывести полученный результат, как в следующем примере.
Листинг 19.4.
[user@host]$ ./sample.bin
Mystic River - Dennis Lehane 
The Memoirs Of Sherlock Holmes - Arthur Conan Doyle
Hannibal - Thomas Harris
The Dilbert Principle - Scott Adams
Life Of Pi - Yann Martel
The Lake House - James Patterson
Bleachers - John Grisham
Mortal Prey - John Sandford
Проанализируем этот код, чтобы лучше понять, каким образом можно использовать C API-интерфейс MySQL для подключения C-программ к базам данных MySQL и выборки данных из них.
1. Программа начинается, как обычно: сначала объявляются все файлы заголовков, которые ей необходимы. Поскольку в нашей программе будут использоваться структуры, присущие MySQL, включим в этот список файл заголовка mysql.h.
#include <stdio.h> #include <mysql.h>
2. После этого задается функция main() и инициализируются некоторые переменные и структуры, которые мы будем использовать на следующих шагах:
/* объявление структур и переменных */ MYSQL mysql; MYSQL_RES *result;
MYSQL_ROW row;
Каждая из этих структур играет специфическую роль в блок-схеме клиентского приложения MySQL. Первая из них - MYSQL - является наиболее важной, т.к. она служит точкой отсчета для любого взаимодействия с сервером. Возвращенный сервером результирующий набор хранится в специальной структуре результирующего набора MYSQL_RES, а выбранные из этой структуры записи будут представлены в структуре MYSQL_ROW.
3. Для того чтобы подключиться к серверу базы данных MySQL, сначала необходимо инициализировать структуру MYSQL. Для этих целей служит функция mysql_init():
mysql_init(&mysql);
После этого с помощью функции mysql_real_connect() можно открыть со­единение с сервером:
mysql_real_connect(&mysql, "localhost", "john", "doe", "db1", 0, NULL, 0);
Этой функции требуется несколько различных аргументов: имя узла, на котором работает сервер MySQL ("localhost"), имя базы данных, к которой производится соединение ("db1"), имя пользователя MySQL ("john") и его пароль ("doe"). Если соединение происходит успешно, эта функция возвращает дескриптор соединения с базой данных, который будет использоваться в дальнейшем для подключения к базе данных.
В разделе "Управление соединением" это обсуждается подробнее.
4. После установления соединения с сервером, для передачи запроса на сервер ис­пользуется функция mysql_query() :
mysql_query(&mysql,"SELECT title, author FROM books"); 
Это может быть любой допустимый SQL-запрос, который принимается сервером MySQL. Заметим, что строка запроса, отправляемого на сервер не должна содержать в конце точку с запятой "; " или "g". В разделе "Выполнение запроса" команда mysql_query() будет рассмотрена детальнее, в том числе ее использование с запросами типа "SELECT" и другими.
5. После выполнения запроса генерируется результирующий набор (конечно, если запросом является запрос SELECT), который каким-то образом присваивается переменной (обычно это указатель на структуру MYSQL_RES) и который можно получить с помощью функции mysql_store_result():. result = mysql_store_result(&mysql);
Теперь записи, имеющиеся в результирующем наборе, можно получить с помощью функции mysql_fetch_row() , которая считывает по одной записи за один раз в структуру MYSQL_ROW. Эта структура является не чем иным, как массивом, каждый элемент которого является полем записи. Поэтому доступ к ней можно получить, просмотрев записи массива: while((row= mysql_fetch_row(result))) {
fprintf(stdout, "%s - %sn", row[0], row[1]);
После того как все записи в результирующем наборе выбраны, функция mysql_fetch_row() возвращает значение NULL. После этого функция mysql_free_result() освобождает память от результирующего набора, а функция mysql_close() закрывает соединение с базой данных:
mysql_free_result(result); mysql_close(&mysql);
Опытные программисты, конечно же, сразу заметят, что этот пример исходного текста не содержит проверки на ошибки. Такая проверка была пропущена преднамеренно для простоты рассуждений, но не беспокойтесь - этот вопрос обязательно будет рассмотрен по мере нашего повествования.
Кроме того, следует заметить, что этот пример программного кода работает только с уже существующими базами данных и соответствующими таблицами. SQL-код, необходимый для создания этих таблиц (вместе с электронными копиями исходного текста из этой и следующих глав), можно найти на Web-узле http://www.mysql-tcr.com.
Итак, представленные пять этапов составляют основу процесса создания информационных приложений с использованием MySQL C API. В следующих разделах эти шаги мы рассмотрим более подробно.

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
Все о MySQL. MySQL and C Все о MySQL. Управление соединением