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

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

Жанры

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

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

Долг

Кораблев Родион
7. Другая сторона
Фантастика:
боевая фантастика
5.60
рейтинг книги
Долг

Экспансия — II

Семенов Юлиан Семенович
11. Штирлиц
Детективы:
исторические детективы
7.78
рейтинг книги
Экспансия — II

Елизавета Петровна

Сахаров Андрей Николаевич
11. Романовы. Династия в романах
Проза:
историческая проза
5.50
рейтинг книги
Елизавета Петровна

Жребий брошен

Прозоров Александр Дмитриевич
10. Ведун
Фантастика:
фэнтези
8.90
рейтинг книги
Жребий брошен

Русские дети (сборник)

Фрай Макс
Проза:
современная проза
5.60
рейтинг книги
Русские дети (сборник)

Северное сияние

Робертс Нора
Любовные романы:
остросюжетные любовные романы
8.66
рейтинг книги
Северное сияние

Ермак. Противостояние. Книга одиннадцатая

Валериев Игорь
11. Ермак
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Ермак. Противостояние. Книга одиннадцатая

Черная свеча

Высоцкий Владимир Семенович
Проза:
современная проза
7.88
рейтинг книги
Черная свеча

Сочинения

Брюсов Валерий Яковлевич
Проза:
русская классическая проза
5.00
рейтинг книги
Сочинения

Герда

Веркин Эдуард Николаевич
Детские:
детская проза
5.00
рейтинг книги
Герда

Паладин из прошлого тысячелетия

Еслер Андрей
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
6.67
рейтинг книги
Паладин из прошлого тысячелетия

Бальтазар Косса

Балашов Дмитрий Михайлович
Проза:
историческая проза
5.75
рейтинг книги
Бальтазар Косса

Буря Жнеца

Эриксон Стивен
7. «Малазанская империя»
Фантастика:
фэнтези
6.60
рейтинг книги
Буря Жнеца

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Гримуар темного лорда III