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

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

Жанры

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

 while (field_count < mysql_field_count(&my_connection)) {

if (sqlrow[field_count]) printf("%s ", sqlrow[field_count]);

else printf("NULL");

field_count++;

 }

 printf("\n");

}

Когда вы откомпилируете и выполните программу, то получите следующий вывод:

$ ./select4

Connection success

Column details:

Name: childno

Type: Numeric field

Max width 11

Auto increments

Name: fname

Type: VARCHAR

Max width 30

Name: age

Type: Numeric field

Max width 11

Column details:

1 Jenny 21

2 Andrew 17

$

Вывод все еще не слишком привлекателен, но он демонстрирует, как можно обрабатывать и данные, и метаданные, что позволяет более эффективно работать с вашей информацией.

Есть и другие функции, позволяющие извлекать массивы полей и переходить от столбца к столбцу. Как правило, приведенные здесь подпрограммы — все, что вам потребуется; любознательный читатель сможет найти более подробную информацию в руководстве по MySQL.

Разные функции

Есть несколько приведенных в табл. 8.13 дополнительных функций API, которые мы рекомендуем изучить. В основном того, что обсуждалось до сих пор, достаточно для создания функциональной программы, но этот частичный перечень нам кажется полезным.

Таблица 8.13

Пример API-вызова Описание
char *mysql_get_client_info(void);
Возвращает данные о версии библиотеки, используемой клиентской программой
char *mysql_get_host_info(MYSQL *connection);
Возвращает информацию о подключении к серверу
char *mysql_get_server_info(MYSQL *connection);
Возвращает информацию о сервере, к которому вы в данный момент подключены
char *mysql_info(MYSQL* connection);
Возвращает информацию о самом последнем выполненном запросе, но работает только с запросами нескольких типов — обычно с операторами
INSERT
и
UPDATE
. В противном случае возвращает
NULL
int mysql_select_db(MYSQL *connection, const char *dbname);
Заменяет базу данных, применяемую по умолчанию, на заданную в качестве параметра, при условии, что у пользователя есть соответствующие права доступа. В случае успеха возвращает ноль
int mysql_shutdown(MYSQL* connection, enum mysql_enum_shutdown level);
Если у вас есть соответствующие права, завершает работу сервера базы данных, к которому вы подключены. В этот момент уровень останова следует задать равным
SHUTDOWN_DEFAULT
. В случае успеха возвращает ноль

Приложение для работы с базой данных компакт-дисков

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

Начните с создания новой базы данных и затем сделайте ее текущей базой данных.

mysql> create database blpcd;

Query OK, 1 row affected (0.00 sec)

mysql> use blpcd

Connection id: 10

Current database: blpcd

mysql>

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

Эта версия немного сложнее предыдущей, потому что вы выделите три отдельных элемента компакт-диска: исполнителя (или группу), элемент главного каталога и дорожки. Если вы подумаете о коллекции компакт-дисков и компонентах, ее составляющих, то поймете, что каждый компакт-диск состоит из ряда разных дорожек, но различные компакт-диски связаны друг с другом многими параметрами: исполнителем или группой, компанией, производящей их, представленным музыкальным стилем и т.д.

Вы могли бы сделать базу данных очень сложной, попытавшись сохранить все эти разные параметры, но в данном примере ограничьте себя только двумя самыми важными связями.

Во-первых, каждый компакт-диск состоит из переменного количества дорожек, поэтому вы будете хранить данные о дорожке в таблице, отделенной от остальных данных компакт-диска. Во-вторых, у каждого исполнителя (или группы) часто несколько альбомов, поэтому было бы удобно сохранять сведения об исполнителе один раз, а затем отдельно извлекать все компакт-диски, записанные этим исполнителем. Вы не будете пытаться разбить группы на разных исполнителей, которые, возможно, выпустили сольные альбомы, или работать со сборными компакт-дисками — вы будете стараться сохранять структуру вашей коллекции простой!

Связи тоже сохраняйте очень простыми — каждый исполнитель (им может быть название группы) выпустил один или несколько компакт-дисков и каждый компакт-диск состоит из одной или нескольких дорожек. Связи или отношения в вашей базе данных представлены на рис. 8.8.

Рис. 8.8

Создание таблиц

Сейчас вы должны определить реальную структуру таблиц. Начните с основной таблицы — таблицы компакт-дисков (

cd
), в которой хранится большая часть информации. Вам нужно сохранять идентификационный номер (
id
) компакт-диска, номер каталога, название и, возможно, ваши собственные заметки. Вам также понадобится ID-номер из таблицы исполнителей, чтобы знать, какой исполнитель выпустил альбом.

Таблица исполнителей (

artist
) очень проста; сохраните в ней только имя исполнителя и уникальный идентификационный номер (id) исполнителя. Таблица дорожек (
track
) также чрезвычайно проста; вам нужен только ID компакт-диска, чтобы знать, к какому CD относится дорожка, номер дорожки и название дорожки.

Сначала таблица компакт-диска:

CREATE TABLE cd (

 id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,

 title VARCHAR(70) NOT NULL,

 artist_id INTEGER NOT NULL,

 catalogue VARCHAR(30) NOT NULL,

 notes VARCHAR(100)

);

Приведенный программный код создает таблицу с именем

cd
со следующими столбцами:

 столбец

id
, содержащий целое число, которое автоматически увеличивается и представляет собой первичный ключ таблицы;

 столбец

title
длиной до 70 символов;

 столбец

artist_id
— целое число, которое будет использоваться в таблице
artist
;

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

Князь Целитель 6

Ткачев Андрей Юрьевич
6. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Князь Целитель 6

Локки 2. Потомок бога

Решетов Евгений Валерьевич
2. Локки
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Локки 2. Потомок бога

Князь Андер Арес 5

Грехов Тимофей
5. Андер Арес
Фантастика:
историческое фэнтези
фэнтези
героическая фантастика
5.00
рейтинг книги
Князь Андер Арес 5

Инженер Петра Великого 2

Гросов Виктор
2. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Инженер Петра Великого 2

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

Проклятый Лекарь. Том 2

Молотов Виктор
2. Анатомия Тьмы
Фантастика:
фэнтези
попаданцы
7.00
рейтинг книги
Проклятый Лекарь. Том 2

Афганский рубеж

Дорин Михаил
1. Рубеж
Фантастика:
попаданцы
альтернативная история
7.50
рейтинг книги
Афганский рубеж

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Дважды одаренный. Том VI

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Адвокат

Константинов Андрей Дмитриевич
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Адвокат

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4

Дворянин

Злотников Роман Валерьевич
2. Император и трубочист
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Дворянин

Геном хищника. Книга четвертая

Гарцевич Евгений Александрович
4. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга четвертая