|
Программирование >> Программный интерфейс приложений
Окончательный программный код отображения результирующего набора данных имеет следующий вид. Процедура печати тире сведена в отдельную функцию print dashes(): void print dashes (MYSQL RES *res set) { MYSQL FIELD * field; unsigned mt i, ]; mysql field seek (res set, 0); fputc ( + , stdout); for (1 =0; 1 < mysql num fields {res set); i++) { field = mysql fetch field (res set); for (: = 0; ] < field->max length + 2; ]++) fputc ( -, stdout); fputc (+, stdout); fputc (\n, stdout) ; void process result set (MYSQL *conn, MYSQL RES *res set) { MYSQL FIELD *field; MYSQL ROW row; unsigned mt i, col len; /* определить длину отображаемого столбца */ mysql field seek (res set, 0); for (1 =0; 1 < mysql num fields (res set); i++) ( field = mysql fetcti field (res set); col len = strlen {field->name) ; if (col len < field ->max lengtti) col len = field ->max lengtti; if (col len < 4 && iIS NOT NULL (field->flags)) col len = 4 ; /* 4 = длине слова NULL */ field->max lengtti = col len; /* обновить информацию о столбце) print dashes (res set); fputc ( I , stdout); mysql field seelc {res set, 0); for (1 = 0; 1 < mysql num fields (res set); i++) { field = mysql fetcti field (res set); printf { %-*s 1 , field ->max lengtti, field->name) ; fputc ( \n , stdout) ; print daslies ( res set ) ; wtiile ((row = mysql fetcli row (res set) ) !- NULL) { mysql field seelc (res set, 0); fputc ( I , stdout); for (i = 0; i < mysql num fields (res set); i++) { field = mysql fetch field (res set); if (row[i) == null) printf ( %-*s I , field ->max length, null ); else if (is num (field->type)) printf ( %*s 1 , field->max length, row[i]); else printf ( %-*s I , field->max length, row[i]); fputc ( \n , stdout); print dashes (res set); printf ( обработано %lu строк\п , (unsigned long) mysql num rows (res set)); } Клиентская библиотека СУБД MySQL поддерживает несколько способов доступа к структурам, содержащим информацию о столбцах. Например, код в предыдущем примере полчает доступ к этим структурам несколько раз с помощью цикла, такого вида: mysql field seelc (res set, 0); for (i = 0; i < mysql num fields (res set); field = mysql fetch field (res set); Однако комбинация mysql field seek ()/mysql fetch field{) является единственным методом доступа к структурам MYSQL FIELD. Более детальные данные можно найти в разделах, посвященных функциям mysql fetch fieldsО и mysql fetch field directО В приложении Е, Программный интерфейс приложений С . Clients - программа интерактивного ввода запросов Теперь соберем все сделанные нами наработки вместе и на базе этого попробуем создать простейшую профамму-клиент, обладающую интерактивными возможностями. Ее задача заключается в вводе запросов, выполнении их с помошью обработчика запросов общего назначения process query О , а затем отображении полученных результатов с помошью процедуры process result set (). Клиенты в некотором смысле аналогичны mysql, хотя, конечно, не имеют таких же широких возможностей. Есть некоторые ограничения на то, что эти клиенты позволяют в качестве ввода. Каждая вводимая строка должна содержать один полный запрос. Запросы не должны завершаться двоеточием или \д . Для выхода нужно пользоваться комбинацией клавиш <Ctrl+D>, а не командой Exit . Оказывается, что клиентские профаммы очень просто написать (немногим более 10 сфок нового кода). Почти все, что нам нужно, уже присутствует в скелете клиентской программы (client4.c) и другом профаммном коде, который уже нами был написан. Осталось только добавить цикл, который собирает входные строки и выполняет их. Для создания программы-клиента clients, с сначала скопируем скелет программы client4.c в файл clients, с. Затем добавим вызовы process query(), process result set() и print dashes(). Наконец, найдем следующую Сфоку в main (): /* поместите сюда основные операции */ И заменим их следующими операциями: while (1) { char buf[1024]; printf (stderr, query> ) ; /* вывод подсказки */ if Cfgets (buf, sizeof (buf), stdin) == NULL) /* прочесть запрос */ break; process query (conn, but); /* выполнение запроса */ Теперь откомпилируйте clients, с для того, чтобы получить clients, о, скомпонуйте clients, о с common, о и с клиентской библиотекой, И все сделано! В результате у нас в распоряжении появится новая клиентская профамма, которая может выполнить любой запрос и отобразить полученные результаты. Разное Этот раздел посвящен некоторым проблемам, которые не попали в поле зрения при изучении клиентских профамм clienti и clients. Вычисление результата на основании данных результирующего набора, после предварительной проверки с помощью метаданных, чтобы определить, насколько эти данные пригодны для проведения вычислений. Что делать с данными, которые нельзя вставить в запросы. Как обрабатывать изображения. Как получить информацию о сфукгуре таблиц. Ошибки программирования в СУБД MySQL, которые встречаются наиболее часто, и способы их предотвращения.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.002
При копировании материалов приветствуются ссылки. |