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

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

Жанры

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

return 0;

 }

 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", &artist_id);

}

mysql_free_result(res_ptr);

}

 }

 return artist_id;

} /* get_artist_id */

Переходите

к вставке информации о дорожках для вашего компакт-диска. И снова защититесь от специальных символов в названиях дорожек:

int add_tracks(struct current_tracks_st *tracks) {

 int res;

 char is[250];

 char es[250];

 int i;

 if (!dbconnected) return 0;

 i = 0;

 while (tracks->track[i][0]) {

mysql_escape_string(es, tracks->track[i], strlen(tracks->track[i]));

sprintf(is,

"INSERT INTO track(cd_id, track_id, title) VALUES(%d, %d, '%s')",

tracks->cd_id, i + 1, es);

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;

}

i++;

 }

 return 1;

} /* add tracks */

Теперь переходите к извлечению информации о компакт-диске с заданным значением его ID. Будет применена операция объединения базы данных для извлечения ID исполнителя во время получения данных об ID диска. Это обычно хороший подход: системы управления базами данных отлично знают, как эффективно выполнять сложные запросы, поэтому никогда не пишите прикладной программный код для того, что вы можете просто попросить сделать СУРБД, передав ей запрос на языке SQL. Есть шанс сберечь собственные силы, не тратя их на написание дополнительного программного кода, и получить приложение, работающее более эффективно, разрешив СУРБД выполнить максимально возможный объем работы.

int get_cd(int cd_id, struct current_cd_st *dest) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char qs[250];

 if (!dbconnected) return 0;

 memset(dest, 0, sizeof(*dest));

 dest->artist_id = -1;

 sprintf(qs, "SELECT artist.id, cd.id, artist.name, cd.title, cd.catalogue \

FROM artist, cd WHERE artist.id = cd.artist_id and cd.id = %d", cd_id);

 res = mysql_query(&my_cormection, 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 (mysql_num_rows(res_ptr) > 0) {

if (mysqlrow = mysql_fetch_row(res_ptr)) {

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

sscanf(mysqlrow[1], "%d", &dest->cd_id);

strcpy(dest->artist_name, mysqlrow[2]);

strcpy(dest->title, mysqlrow[3]);

strcpy(dest->catalogue, mysqlrow[4]);

}

}

mysql_free_result(res_ptr);

}

 }

 if (dest->artist_id != -1) return 1;

 return 0;

} /* get_cd */

Далее

вы реализуете извлечение информации о дорожках. В SQL-операторе вы задаете ключевые слова
ORDER BY
, для того чтобы возвращать дорожки в подходящей последовательности. И опять это позволит СУРБД выполнить нужную работу более эффективно, чем если бы вы извлекли дорожки в произвольном порядке, а затем написали собственный программный код для их сортировки.

int get_cd_tracks(int cd_id, struct current_tracks_st *dest) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char qs[250];

 int i = 0, num_tracks = 0;

 if (!dbconnected) return 0;

 memset(dest, 0, sizeof(*dest));

 dest->cd_id = -1;

 sprintf(qs, "SELECT track_id, title FROM track WHERE track.cd_id = %d \

ORDER BY track_id", cd_id);

 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 ((num_tracks = mysql_num_rows(res_ptr)) > 0) {

while (mysqlrow = mysql_fetch_row(res_ptr)) {

strcpy(dest->track[i], mysqlrow[1]);

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

Орден Архитекторов 11

Винокуров Юрий
11. Орден Архитекторов
Фантастика:
фэнтези
5.00
рейтинг книги
Орден Архитекторов 11

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Запрети любить

Джейн Анна
1. Навсегда в моем сердце
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Запрети любить

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

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

Сталин

Рыбас Святослав Юрьевич
1190. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
4.50
рейтинг книги
Сталин

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

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

Кодекс Императора IV

Сапфир Олег
4. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора IV

Деревенщина в Пекине

Афанасьев Семён
1. Пекин
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Деревенщина в Пекине

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Искатель 2

Шиленко Сергей
2. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 2

Петля, Кадетский корпус. Книга третья

Алексеев Евгений Артемович
3. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский корпус. Книга третья

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Законы Рода. Том 8

Мельник Андрей
8. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 8

Потомок бога

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