Объектно-ориентированный доступ к базам данных на C++ - часть 2
#if defined(HAS_MSQL)
int connection;
#elif defined(HAS_MYSQL)
MYSQL mysql;
MYSQL 'connection; tfelse
#error База данных не определена,
#endif
public:
Connection(char *, char *);
Connection(char *, char *, char *, char *);
~Connection();
void Close();
void Connect(char 'host, char *db, char *uid, char *pw);
int GetAffectedRows();
char. *GetError();
int IsConnected();
Result *Query(char *);
};
#endif // l_connection_h
Методы, которые предоставляет класс Connection, одинаковы вне зависимости от используемой СУБД. Однако спрятанными в глубине класса окажутся закрытые члены, специфичные для той библиотеки, с которой он будет компилироваться. При установлении соединения единственными различными данными-членами станут те, которые представляют соединение с базой данных. Как отмечалось, mSQL для представления соединения использует величину типа int, a MySQL использует указатель на MYSQL и дополнительную величину типа MYSQL для установления соединения.
Установление соединения с базой данных
Всем приложениям, которые мы будем создавать с использованием этого API, для соединения с базой данных потребуется только создать новый экземпляр класса Connection с помощью одного из его конструкторов. Аналогично, приложение может отсоединиться, уничтожив экземпляр Connection . Оно может даже повторно использовать экземпляр Connection с помощью прямых обращений к методам Close() и Соnnect(). Пример 13-4 показывает реализацию конструкторов и метода Connect().
Пример 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;