|
#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() возбуждает исключительную ситуацию.
Отсоединение от базы данных
Другой логической функцией класса 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;
#else
#error Нет соединения с базой данных, tfendif }
Методы mysql_close() и msqlClose() освобождают ресурсы, используемые
соединениями с MySQL и mSQL соответственно.
Выполнение обращений к базе данных
В промежутке между открытием соединения и закрытием базе данных обычно
посылаются команды. Класс Connection делает это с помощью метода Query(),
|
|