Универсальный менеджер баз данных (Wrapper) - PullRequest
2 голосов
/ 12 октября 2010

AFAIK, мы все должны программировать в базу данных через упаковщик / менеджер баз данных, такой как sqliteman или CppSQLite.

Но оболочка базы данных специфична для одного типа базы данных, и это не удобно для программиста, потому что в случае, если база данных была заблокирована, требуется много модификаций.

Поэтому я хотел бы написать универсальную оболочку базы данных, которая может взаимодействовать с различными типами баз данных.

Я создал шаблон класса, как показано ниже.

template<typename T>
class ClsDatabaseManager
{
public:

// Pure Virtual Function
// All derived classes must implements it and forward the call 
// appropriate database wrapper
connect(string);
disconnect(string);
Execute(string);
CreateTable(string);
CreateDatabase(string);

private:
T m_table;
T m_database;

};


class sqliteManager : public ClsDatabaseManager<T>
{
// Implement all the function by forward the call
};

Поэтому я буду использовать черты для получения типа информации на основе предоставленного аргумента шаблона.

Этот аргумент шаблона является типом класса, производным от этого базового класса, такого как sqlite, postgresql и mysql.

Итак, любые предложения или рекомендации по моему дизайну.

Как создать общий интерфейс базы данных и переадресовать вызов в определенную библиотеку интерфейса базы данных.

РЕДАКТИРОВАТЬ:

Чем отличается ODBC от C ++ Database Access Library (Soci)?

Пожалуйста, помогите.

Спасибо.

Ответы [ 3 ]

1 голос
/ 12 октября 2010

ODBC - это протокол.Это открытое соединение с базой данных, которое определяет функции, которые база данных должна предоставлять, чтобы пользователь мог использовать ее в своем коде C / C ++.Обычно базы данных предоставляют собственный ODBC-совместимый драйвер.Soci - это библиотека, которая делает то, что вы хотите.Это библиотека, поэтому она должна иметь свою собственную реализацию, которую вы можете использовать напрямую.

0 голосов
/ 12 октября 2010

Это на самом деле не ответ на ваш конкретный вопрос, а как насчет использования Soci ? Он поддерживает sqlite, postgresql и mysql, а также Oracle, Firebird и ODBC.

0 голосов
/ 12 октября 2010

1 соединение для каждого доступа к таблице, вы бы поменялись местами использования вашей сети базы данных.Создайте класс Connection, детали подключения, предпочтительно статическую реализацию, и используйте его как компонент (Composition) вашего класса.

Держите ваше соединение независимым от транзакций базы данных.В случае сбоя одной транзакции, по крайней мере, вы можете выгрузить поток и использовать те же данные соединения для следующей транзакции.Вы можете использовать одно и то же соединение для нескольких попыток доступа к базе данных вместо создания 1 соединения / доступа к таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...