MySQL & mSQL



              

Объектно-ориентированный доступ к базам данных на C++ - часть 4


#else

#error Нет соединения с базой данных, tfendif }

Методы mysql_close() и msqlClose() освобождают ресурсы, используемые соединениями с MySQL и mSQL соответственно.

Выполнение обращений к базе данных

В промежутке между открытием соединения и закрытием базе данных обычно посылаются команды. Класс Connection делает это с помощью метода Query(), принимающего команду SQL в качестве аргумента. Если команда является запросом, она возвращает экземпляр класса Result из объектной модели, представленной на рио. 13-1. Если же команда обновляет данные, то метод возвращает NULL и устанавливает значение affected_rows равным количеству строк, в которых произведены изменения. В примере 13-6 показано, как класс Connection обрабатывает запросы к базам данных MySQL и mSQL.

Пример 13-6. Обработка запроса к базе данных

Result "Connection::Query(char *sql) { T_RESULT *res; int state;

// Если нет соединения, делать нечего

if( !lsConnected(-) ) { throw "Соединения нет.";

}

// Выполнить запрос

#if defined(HAS_MSQL)

state = msqlQuery(connection, sql);

#elif defined(HAS_MYSQL)

state = mysql_query(connection, sql);

#else

#error Нет соединения с базой данных,

#endif

// Если произошла ошибка

if( state < 0 ) { throw GetError();

}

// Забрать результаты, если таковые имеются

#if defined(HAS_MSQL)

res = msqlStoreResult();

#elif defined(HAS_MYSQL)

res = mysql_store_result(connection);

#else

#error Нет соединения с базой данных,

#endif

// Если результат null, это было обновление или произошла ошибка

// Примечание: mSQL не порождает ошибки в msqlStoreResult()

if( res == (T_RESULT *)NULL ) {

// Установить значение affected_rows равным возвращенному msqlQuery()

#if defined(HAS_MSQL)

affected_rows = state;

#elif defined(HAS_MYSQL)

// field_count != 0 означает, что произошла ошибка

int field_count = mysql_num_fields(connection);

if( field_count != 0 )

{

throw GetError();

}

else

{

// Запомнить affected_rows

affected_rows = mysql_affected_rows(connection); }




Содержание  Назад  Вперед