MySQL & mSQL


              

в зависимости от того, для


row = mysql_fetch_row(result);

#else

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

#endif if( ! row )

{

current_row = (Row *)NULL;

return 0;

}

else

{

current_row = new Row(result, row);

return 1;

}

}

Row 'Result::GetCurrentRow()

{

if( result == (T_RESULT *)NULL )

{ throw "Результирующий набор закрыт.";

}

return current_row; }

Заголовочный файл row.h в примере 13-11 определяет T_ROW и T_RESULT в зависимости от того, для какого ядра базы данных компилируется приложение. Перемещение к следующей строке в обеих базах данных осуществляется одинаково и просто. Вы вызываете mysql_fetch_row() или msqlFetchRow() . Если вызов возвращает NULL, значит, необработанных строк не осталось.

В объектно-ориентированной среде это единственный тип навигации, которым вы должны пользоваться. API для базы данных в объектно-ориентированном программировании существует лишь для обеспечения извлечения данных, а не их обработки. Обработка данных должна быть заключена в объектах доменов. Однако не все приложения являются объектно-ориентированными. MySQL и mSQL предоставляют функции, позволяющие перемещаться к определенным строкам в базе данных. Это методы mysql_data_seek() mnsqlDataSeek() соответственно.

Освобождение ресурсов и подсчет строк

Приложения баз данных должны освобождать после себя ресурсы. Обсуждая класс Connection, мы отметили, как результирующие наборы, порождаемые запросом, помещаются в память, управляемую приложением. Метод Close() класса Result освобождает память, занятую этим результатом. Пример 13-10 показывает, как освободить ресурсы, занятые результатом, и получить количество строк в нем.

Пример 13-10. Освобождение ресурсов и подсчет числа строк

void Result::Close() {

if( result == (T_RESULT *)NULL ) { return;

}

#if defined(HAS_MSQL)

msqlFreeResult(result);

#elif defined(HAS_MYSQL)

mysql_free_result(result);

#else

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

result = (TJESULT *)NULL; '

}

int Result::GetRowCount()

{


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