Читать интересную книгу Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 155 156 157 158 159 160 161 162 163 ... 324

 strcpy(ct.track[1], "Kraftig bewegt");

 strcpy(ct.track[2], "Feierlich und gemessen");

 strcpy(ct.track[3], "Stürmisch bewegt");

 add_tracks(set);

Теперь поищите компакт-диск и извлеките информацию из первого найденного CD:

 res = find_cds("Symphony", &cd_res);

 printf("Found %d cds, first has ID %dn", res, cd_res.cd_id[0]);

 res = get_cd(cd_res.cd_id[0], &cd);

 printf("get_cd returned %dn", res);

 memset(&ct, 0, sizeof(ct));

 res = get_cd_tracks(cd_res.cd_id[0], set);

 printf("get_cd_tracks returned %dn", res);

 printf("Title: %sn", cd.title);

 i = 0;

 while (i < res) {

  printf("ttrack %d is %sn", i, ct.track[i]);

  i++;

 }

В заключение удалите компакт-диск:

 res = delete_cd(cd_res.cd_id[0]);

 printf("Delete_cd returned %dn", res);

Затем отключитесь и завершите работу программы:

 database_end();

 return EXIT_SUCCESS;

}

Реализация интерфейса

Теперь более трудная часть — реализация интерфейса, описанного вами. Вся она хранится в файле app_mysql.с.

Начните с основных файлов include, глобальной структуры подключения, которая понадобится, и флага dbconnected, который будет применяться для того, чтобы приложения не пытались получить доступ к данным, если у них нет подключения. Вы также используете внутреннюю функцию get_artist_id, для улучшения структуры программы:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include "mysql.h"

#include "app_mysql.h"

static MYSQL my_connection;

static int dbconnected = 0;

static int get_artist_id(char *artist);

Как вы видели ранее в этой главе, подключиться к базе данных очень просто, а отключиться от нее и того проще:

int database_start(char *name, char *pwd) {

 if (dbconnected) return 1;

 mysql_init(&my_connection);

 if (!mysql_real_connect(&my_connection, "localhost",

  name, pwd, "blpcd", 0, NULL, 0)) {

  fprintf(stderr, "Database connection failure: %d, %sn",

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

  return 0;

 }

 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: %sn",

   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: %sn", mysql_error(&my_connection));

1 ... 155 156 157 158 159 160 161 162 163 ... 324
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Основы программирования в Linux - Мэтью Нейл.

Оставить комментарий