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

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

Жанры

Основы программирования в 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]);

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

Эмблема

Поселягин Владимир Геннадьевич
2. Целитель
Фантастика:
технофэнтези
фэнтези
5.00
рейтинг книги
Эмблема

Мы друг друга не выбирали

Кистяева Марина
1. Мы выбираем...
Любовные романы:
остросюжетные любовные романы
прочие любовные романы
современные любовные романы
5.00
рейтинг книги
Мы друг друга не выбирали

Кодекс Охотника. Книга XXXIV

Винокуров Юрий
34. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIV

Ты - наша

Зайцева Мария
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Ты - наша

Deus vult

Зот Бакалавр
9. Герой Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Deus vult

Сирота

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

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Травница Его Драконейшества

Рель Кейлет
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Травница Его Драконейшества

Архил...? 4

Кожевников Павел
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
5.50
рейтинг книги
Архил...? 4

Отряд

Валериев Игорь
5. Ермак
Фантастика:
альтернативная история
5.25
рейтинг книги
Отряд

Отмороженный 13.0

Гарцевич Евгений Александрович
13. Отмороженный
Фантастика:
боевая фантастика
попаданцы
рпг
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 13.0

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

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

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

Эволюционер из трущоб. Том 6

Панарин Антон
6. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 6