Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Начинаем изучать MySQL
<<-[Весь Текст]
Страница: из 157
 <<-
 
public:
Result(T_RESULT *);
~Result();
void Close();
Row *GetCurrentRow(); 
int GetRowCount(); 
int Next(); };
#endif // l_result_h
Перемещение по результатам
Наш класс Result позволяет работать с результирующим набором построчно. Получив 
экземпляр класса Result в результате обращения к методу Query() , приложение 
должно последовательно вызывать Next() и GetCurrentRow(), пока очередной Next() 
не возвратит 0. Пример 13-9 показывает, как выглядят эти действия для MySQL и 
mSQL.
Пример 13-9. Перемещение по результирующему набору
int Result::Next() { T_ROW row;
if( result == (T_RESULT *)NULL ) {
throw "Результирующий набор закрыт.";
}
#if defined(HAS_MSQL)
row = msqlFetchRow(result); 
#elif defined(HAS_MYSQL)
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() 
{
if( result == (T_RESULT *)NULL ) 
{
throw "Результирующий набор закрыт.";
} 
if( row_count > -1 )
{
 
<<-[Весь Текст]
Страница: из 157
 <<-