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

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

Жанры

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

 }

 dbconnected = 1;

 return 1;

} /* database_start */

void database_end {

 if (dbconnected) mysql_close(&my_connection);

 dbconnected = 0;

} /* database_end */

Начинается реальная работа благодаря функции

add_cd
. Вам нужны сначала несколько объявлений и санитарная проверка, Чтобы убедиться в наличии подключения к базе данных. Вы увидите ее во всех написанных функциях, доступных извне.

Напоминаем о том, что программа будет отслеживать имена исполнителей автоматически:

int add_cd(char *artist, char *title, char* catalogue, int *cd_id) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char is[250];

 char es[250];

 int artist_id = -1;

 int new_cd_id = -1;

 if (!dbconnected) return 0;

Далее нужно проверить, существует ли уже исполнитель, если нет, то создать его. Обо всем этом заботится функция

get_artist_id
, которую вы скоро увидите:

 artist_id = get_artist_id(artist);

Теперь, имея

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

 mysql_escape_string(es, title, strlen(title));

 sprintf(is,

"INSERT INTO cd(title, artist_id, catalogue) VALUES('%s', %d, '%s')",

es, artist_id, catalogue);

 res = mysql_query(&my_connection, is);

 if (res) {

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

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

return 0;

 }

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

LAST_INSERT_ID
.

 res = mysql_query(&my_connection, "SELECT LAST_INSERT_ID");

 if (res) {

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

return 0;

 } else {

res_ptr = mysql_use_result(&my_connection);

if (res_ptr) {

if ((mysqlrow = mysql_fetch_row(res_ptr))) {

sscanf(mysqlrow[0], "%d", &new_cd_id);

}

mysql_free_result(res_ptr);

}

He стоит беспокоиться о других программах-клиентах, вставляющих компакт-диски в это же время, и о возможной путанице поступающих номеров ID; СУРБД MySQL запоминает присвоенный ID для каждого подключения, поэтому, даже если другое приложение вставило компакт-диск прежде, чем вы извлекли ID, вы все равно получите номер, соответствующий вашей строке, а не строке, добавленной другим приложением.

И последнее, но не по степени важности, установите ID вновь добавленной строки и верните код успешного или аварийного завершения:

*cd_id = new_cd_id;

if (new_cd_id != -1) return 1;

return 0;

 }

} /* add_cd */

Теперь посмотрите реализацию функции

get_artist_id
; процесс очень похож на вставку записи о компакт-диске:

/* Поиск или создание artist_id для заданной строки */

static int get_artist_id(char *artist) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char qs[250];

 char is[250];

 char es[250];

 int artist_id = -1;

 /* Он уже существует? */

 mysql_escape string(es, artist, strlen(artist));

 sprintf(qs, "SELECT id FROM artist WHERE name = '%s'", es);

 res = mysql_query(&my_connection, qs);

 if (res) {

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

 } else {

res_ptr = mysql_store_result(&my_connection);

if (res_ptr) {

if (mysqr_num_rows(res_ptr) > 0) {

if (mysqlrow = mysql_fetch_row(res_ptr)) {

sscanf(mysqlrow[0], "%d", &artist_id);

}

}

mysql_free_result(res_ptr);

}

 }

 if (artist_id != -1) return artist_id;

 sprintf(is, "INSERT INTO artist(name) VALUES ('%s')", es);

 res = mysql_query(&my_connection, is);

 if (res) {

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

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

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

Библия. Новый русский перевод

Коллектив авторов
Религия и эзотерика:
христианство
6.57
рейтинг книги
Библия. Новый русский перевод

Герои 1812 года

Дуров Валерий Александрович
680. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Герои 1812 года

Шайтан Иван 4

Тен Эдуард
4. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
8.00
рейтинг книги
Шайтан Иван 4

Собрание сочинений (Том 1)

Лиханов Альберт Анатольевич
Детские:
прочая детская литература
5.00
рейтинг книги
Собрание сочинений (Том 1)

Байка о том, как Лиса и Красная Королева о рае мечтали

Клауд Чак
1. Байки безумца Клауда
Фантастика:
юмористическая фантастика
5.00
рейтинг книги
Байка о том, как Лиса и Красная Королева о рае мечтали

Город золотых теней

Уильямс Тэд
1. Иноземье
Фантастика:
научная фантастика
7.00
рейтинг книги
Город золотых теней

"Фантастика 2025-16". Компиляция. Книги 1-14

Коновалов Виктор
Фантастика 2025. Компиляция
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Фантастика 2025-16. Компиляция. Книги 1-14

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

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

Дети Хедина (антология)

Перумов Ник
Миры Упорядоченного
Фантастика:
фэнтези
7.64
рейтинг книги
Дети Хедина (антология)

Том 6. Пьесы 1901-1906

Горький Максим
6. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 6. Пьесы 1901-1906

Сборник "Солдат удачи"

Авраменко Александр Михайлович
Фантастика:
боевая фантастика
6.83
рейтинг книги
Сборник Солдат удачи

Прохоровское побоище. Правда о Величайшем танковом сражении

Замулин Валерий Николаевич
Мифы Великой Отечественной
Документальная литература:
прочая документальная литература
5.00
рейтинг книги
Прохоровское побоище. Правда о Величайшем танковом сражении

Эпоха Опустошителя. Том IX

Павлов Вел
9. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том IX

AutoCAD 2009 для студента. Самоучитель

Соколова Татьяна
Компьютеры и Интернет:
программное обеспечение
6.25
рейтинг книги
AutoCAD 2009 для студента. Самоучитель