MySQL & mSQL



              

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


#else

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

#endif

Connect(host, db, uid, pw);

}

void Connection: :Connect(char'host, char *db, char *uid, char *pw)

{

int state;

if( IsConnected() )

{

throw "Соединение уже установлено.";

}

#if defined(HAS_MSQL)

connection = msqlConnect(host);

state = msqlSelectDB(connection, db);

#elif defined (HAS.MYSQL) mysql_init(&mysql);

connection = mysql_real_connect(&mysql, host,

uid, pw,

db, 0, 0); #else

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

#endif

if( !IsConnected() )

{

throw GetError();

}

if( state < 0 )

{

throw GetError();

}

}

Оба конструктора разработаны с учетом различия параметров, требуемых для соединений MySQL и mSQL. Тем не менее эти API должны разрешать обоим конструкторам работать с каждой из баз данных. Это достигается игнорированием ID пользователя и пароля при вызове конструктора с четырьмя аргументами. Аналогично при вызове конструктора с двумя аргументами, серверу MySQL в качестве значений ID пользователя и пароля передаются значения null. Фактическое соединение с базой данных происходит в методе Connect ().

Метод Connect() инкапсулирует все шаги, необходимые для соединения. Для MySQL он вызывает метод mysql_real_connect() . Для mSQL жe сначала вызывается метод msqlConnect(), а затем msqlSelectDB() . При неудаче на любом из этапов Connect() возбуждает исключительную ситуацию.

Отсоединение от базы данных

Другой логической функцией класса Connection является отсоединение от базы данных и освобождение скрытых от приложения ресурсов. Эту функцию осуществляет метод Close (). В примере 13-5 показано, как происходит отсоединение от MySQL и mSQL.

Пример 13-5. Освобождение ресурсов базы данных

Connection::"Connection() {

if( IsConnected() ) {

Close();

} }

void Connection::Close() {

if( !IsConnected() )

{

return;

}

#if defined(HAS_MSQL)

msqlClose(connection);

connection = -1;

#elif defined(HAS_MYSQL)

mysql_close(connection);

connection = (MYSQL *)NULL;




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