Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Типов столбца огромное множество. Полный перечень можно найти в файле mysql_com.h и в документации.

К самым распространенным относятся следующие:

FIELD_TYPE_DECIMAL

FIELD_TYPE_LONG

FIELD_TYPE_STRING

FIELD_TYPE_VAR_STRING

Далее приведен особенно полезный макрос

IS_NUM
, возвращающий значение
true
, если тип поля числовой:

if (IS_NUM(myslq_field_ptr->type)) printf("Numeric type field\n");

Прежде чем обновлять вашу программу, следует упомянуть еще одну функцию:

MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES* result,

 MYSQL_FIELD_OFFSET offset);

Ее можно использовать для переопределения текущего номера поля, который автоматически увеличивается при каждом вызове

mysql_fetch_field
. Если передать нулевое смещение, вы вернетесь назад к первому столбцу.

Теперь, имея всю необходимую информацию для написания программы выборки, покажите все дополнительные данные, относящиеся к заданному столбцу.

Далее приведена программа select4.c, которую мы воспроизводим полностью, чтобы у вас был полный пример для изучения. В программе нет расширенного анализа типов столбцов, в ней только демонстрируются требуемые основные правила.

#include <stdlib.h>

#include <stdio.h>

#include "mysql.h"

MYSQL my_connection;

MYSQL_RES *res_ptr;

MYSQL_ROW sqlrow;

void display_header;

void display_row;

int main(int argc, char *argv[]) {

 int res;

 int first_row = 1; /* Применяется для гарантии того,

что мы выводим заголовок строки точно один раз,

когда данные успешно извлечены */

 mysql_init(&my_connection);

 if (mysql_real_connect(&my_connection, "localhost", "rick",

"secret", "foo", 0, NULL, 0)) {

printf("Connection success\n");

res = mysql_query(&my_connection,

"SELECT childno, fname, age FROM children WHERE age > 5");

if (res) {

fprintf(stderr, "SELECT error: %s\n", mysql_error(&my_connection));

} else {

res_ptr = mysql_use_result(&my_connection);

if (res_ptr) {

while ((sqlrow = mysql_fetch_row(res_ptr))) {

if (first_row) {

display_header;

first_row = 0;

}

display_row;

}

if (mysql_errno(&my_connection)) {

fprintf(stderr, "Retrieve error: %s\n", mysql_error(&my_connection));

}

mysql_free_result(res_ptr);

}

}

mysql_close(&my_connection);

 } else {

fprintf(stderr, "Connection failed\n");

if (mysql_errno(&my_connection)) {

fprintf(stderr, "Connection error %d: %s\n",

mysql_errno(&my_connection), mysql_error(&my_connection))

}

 }

 return EXIT_SUCCESS;

}

void display_header {

 MYSQL_FIELD *field_ptr;

 printf("Column details:\n");

 while ((field_ptr = mysql_fetch_field(res_ptr)) != NULL) {

printf("\t Name: %s\n", field_ptr->name);

printf("\t Type: ");

if (IS_NUM(field_ptr->type)) {

printf("Numeric field\n");

} else {

switch(field_ptr->type) {

case FIELD_TYPE_VAR_STRING:

printf("VARCHAR\n");

break;

case FIELD_TYPE_LONG:

printf("LONG\n");

break;

default:

printf("Type is %d, check in mysql_com.h\n", field_ptr->type);

} /* switch */

} /* else */

printf("\t Max width %ld\n", field_ptr->length);

if (field_ptr->flags & AUTO_INCREMENT_FLAG)

printf("\t Auto increments\n");

printf("\n");

 } /* while */

}

void display_row {

 unsigned int field_count;

 field_count = 0;

Поделиться:
Популярные книги

Тарзан (Сборник рассказов)

Берроуз Эдгар Райс
Тарзан
Приключения:
природа и животные
7.80
рейтинг книги
Тарзан (Сборник рассказов)

Маркс и Энгельс

Серебрякова Галина Иосифовна
421. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Маркс и Энгельс

Газлайтер. Том 3

Володин Григорий Григорьевич
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Реальная угроза

Клэнси Том
4. Джек Райан
Детективы:
боевики
5.75
рейтинг книги
Реальная угроза

Антология «Дракула»

Морган Крис
Фантастика:
ужасы и мистика
мистика
фэнтези
городское фэнтези
5.00
рейтинг книги
Антология «Дракула»

Газлайтер. Том 40

Володин Григорий Григорьевич
40. История Телепата
Фантастика:
альтернативная история
аниме
попаданцы
6.25
рейтинг книги
Газлайтер. Том 40

На горах

Мельников-Печерский Павел Иванович
Проза:
классическая проза
8.87
рейтинг книги
На горах

Париж

Резерфорд Эдвард
The Big Book
Проза:
историческая проза
7.40
рейтинг книги
Париж

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Враг из прошлого тысячелетия

Я еще царь. Книга XXX

Дрейк Сириус
30. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.75
рейтинг книги
Я еще царь. Книга XXX

Трилогия «Хроники Сиалы»

Пехов Алексей Юрьевич
3. В одном томе
Фантастика:
фэнтези
9.47
рейтинг книги
Трилогия «Хроники Сиалы»

Сравнительные жизнеописания

Плутарх
Документальная литература:
биографии и мемуары
8.85
рейтинг книги
Сравнительные жизнеописания

Эндимион. Восход Эндимиона

Симмонс Дэн
Гиперион
Фантастика:
научная фантастика
космическая фантастика
8.36
рейтинг книги
Эндимион. Восход Эндимиона

Город Бездны

Рейнольдс Аластер
1. Космический апокалипсис
Фантастика:
научная фантастика
космическая фантастика
6.71
рейтинг книги
Город Бездны