Платформы корпоративных информационных систем


Пример 13-4. Соединение с MySQL и mSQL в классе Connection



Пример 13-4. Соединение с MySQL и mSQL в классе Connection


#include "connection.h"

Connection::Connection(char *host, char *db) {

#if defined(HAS_MSQL)

connection = -1;

#elif defined(HASJIYSQL)

connection = (MYSQL *)NULL;

#else

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

#endif

Connect(host, db, (char *)NULL, (char *)NULL); }

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

#if defined(HASJISQL)

connection = -1;

#elif defined(HASJIYSQL)

connection = (MYSQL *)NULL;

#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() возбуждает исключительную ситуацию.









Начало  Назад  Вперед


Книжный магазин