Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Начинаем изучать MySQL
<<-[Весь Текст]
Страница: из 157
 <<-
 
Объектно-ориентированный доступ к базам данных на C++
С API прекрасно работают в процедурном программировании на С. Однако они не 
очень хорошо вписываются в объектно-ориентированную среду C++. Чтобы показать, 
как реально использовать в программе эти два API, в оставшейся части главы мы 
создадим с их помощью C++ API для объектно-ориентированного программирования 
баз данных.

Рис. 13-1. Библиотека объектно-ориенитрованного доступа к базе данных
Поскольку мы занимаемся освещением доступа к базам данных MySQL и mSQL, то 
сосредоточимся на специфичных для MySQL и mSQL темах и не будем пытаться 
создать совершенный общий C++ API. Работу с MySQL и mSQL описывают три главных 
понятия: соединение, результирующий набор и строки результирующего набора. Мы 
будем использовать эти понятия как ядро объектной модели, на которой будет 
основываться наша библиотека. Рис. 13-1 показывает эти объекты на UML-диаграмме.
*
Соединение с базой данных
В любой среде доступ к базе данных начинается с соединения. Как вы видели в 
первых двух примерах, MySQL и mSQL по-разному представляют одно и то же понятие 
- соединение с базой данных. Создание нашей объектно-ориентированной библиотеки 
мы начнем с абстрагирования от этого понятия и создания объекта Connection . 
Объект Connection должен уметь устанавливать соединение с сервером, выбирать 
нужную базу данных, посылать запросы и возвращать результаты. Пример 13-3 
показывает заголовочный файл, в котором объявлен интерфейс к объекту Connection.

UML - это новый Унифицированный язык моделирования, созданный Гради Бучем, 
Айваром Якобсоном и Джеймсом Рамбо (Grady Booch, Ivar Jacobson, James Rumbaugh) 
в качестве нового стандарта для документирования объектно-ориентированного 
проектирования и анализа.
Пример 13-3. Заголовок класса Connection
#ifndef l_connection_h
#define l_connection_h
#include 
#if defined(HAS_MSQL) 
#include  
#lelif defined(HAS_MYSQL)
#include  
#endif
#include "result.h"
class Connection { private:
int affected_rows; 
#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;
 
<<-[Весь Текст]
Страница: из 157
 <<-