MySQL & mSQL

         

Отдельная строка результирующего набора представляется


if( result == (T_RESULT *)NULL )

{

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

}

if( row_count > -1 )

{

return row_count;

}

else

{

#if defined(HAS_MSQL)

row_count = msqlNumRows(result);

#elif defined(HAS_MYSQL)

row_count = mysql_num_rows(result);

#else

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

#endif

return row_count;

}

}

Строки

Отдельная строка результирующего набора представляется в нашей объектной модели классом Row. Класс Row позволяет приложению извлекать отдельные поля строки. В примере 13-11 показано объявление класса Row.

Пример 13-11. Объявление класса Row в row.h

#ifndef l_row_h

#define l_row_h

#include <sys/types.h>

#if defined(HAS_MSQL)

#include <msql.h>

#define T_RESULT m_result

#define T_ROW m_row

#elif defined(HAS_MYSQL)

#include <mysql.h>

#define T_RESULT MYSQL_RES

#define T_ROW MYSQL_ROW

#endif

class Row { private:

T_RESULT 'result;

T_ROW fields;

public:

Row(T_RESULT *, T_ROW);

~Row();

char *GetField(int);

int GetFieldCount();

int IsClosed();

void Close();

};

#endif // l_row_h

В обоих API есть макросы для типов данных, представляющие результирующий набор и строку внутри него. В обоих API строка является массивом строк, содержащих данные этой строки, и ничем более. Доступ к этим данным осуществляется по индексу массива в порядке, определяемом запросом. Например, для запроса SELECT user_id , password FROM users индекс 0 указывает на имя пользователя и индекс 1 -на пароль. Наш C++ API делает это индексирование несколько более дружественным для пользователя. GetField(1) возвратит первое поле, или f ields[0]. Пример 13-12 содержит полный листинг исходного кода для класса Row.

Пример 13-12. Реализация класса Row

#include <malloc.h>

#include "row.h"

Row::Row(T_RESULT *res, T_ROW row) {

fields = row;

result = res; }

Row::"Row() {

if( ! IsClosed() ) {

Close();

}

}

void Row::Close() {

if( IsClosed() ) {

throw "Строка освобождена.";


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







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий