通用数据库管理器(包装器)

时间:2010-10-12 10:57:37

标签: c++ database database-design generics

AFAIK,我们都必须通过数据库包装器/管理器(如sqliteman或CppSQLite)编程到数据库。

但是数据库包装器特定于一种类型的数据库,这对程序员来说不方便,因为在数据库被cahnged的情况下需要进行大量的修改。

因此,我想编写一个可以与各种数据库接口的通用数据库包装器。

我已经创建了一个类模板,如下所示。

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
};

因此,我将根据提供的模板参数使用traits获取信息类型。

此模板参数是从此基类派生的类类型,例如sqlite,postgresql和mysql。

所以,对我的设计有任何建议或建议。

如何创建通用数据库接口并转发对特定数据库接口库的调用。

编辑:

ODBC和C ++数据库访问库(Soci)有什么不同?

请帮忙。

感谢。

3 个答案:

答案 0 :(得分:1)

ODBC是协议。它是开放式数据库连接,它定义了数据库应公开的功能,以便用户可以在其C / C ++代码中使用它。通常,数据库提供自己的ODBC兼容驱动程序。 Soci是一个可以做你想要的东西的图书馆。它是一个库,因此它必须具有您自己的实现,您可以直接使用它。

答案 1 :(得分:0)

每个表访问1个连接,您将换掉数据库网络使用情况。创建Connection类,连接详细信息,最好是静态实现,并将其用作您的类的组件(组合)。

保持您的连接独立于数据库事务。如果一个事务失败,至少您可以抢占该线程并使用相同的连接详细信息进行下一个事务。您可以对多个数据库尝试使用相同的连接,而不是创建1个连接/表访问。

答案 2 :(得分:0)

这实际上不是您特定问题的答案,但使用Soci怎么办?它支持sqlite,postgresql和mysql,以及Oracle,Firebird和ODBC。