Программирование >>  Программный интерфейс приложений 

1 ... 97 98 99 [ 100 ] 101 102 103 ... 264


Окончательный программный код отображения результирующего набора данных имеет следующий вид. Процедура печати тире сведена в отдельную функцию 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, которые встречаются наиболее часто, и способы их предотвращения.



1 ... 97 98 99 [ 100 ] 101 102 103 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.002
При копировании материалов приветствуются ссылки.
Яндекс.Метрика