2010-10-12 70 views
2

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

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

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

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

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

编辑:

什么是ODBC和C++的数据库访问库(索契)之间的不同?

请帮忙。

谢谢。

+0

除了Soci,您还可以检查SQLAPI ++。 SQLAPI ++不是免费的。 – 2010-10-12 12:27:00

+0

感谢您的评论。 – peterwkc 2010-10-14 02:10:57

回答

1

ODBC是协议。它是开放的数据库连接,它定义了数据库应该公开的函数,以便用户可以在他们的C/C++代码中使用它。通常,数据库提供了自己的ODBC兼容驱动程序。 社会是图书馆,做你想要的东西。这是一个图书馆,所以它必须有自己的实施,你可以直接使用。

+0

感谢您的评论。 – peterwkc 2010-10-14 02:11:23

0

为每个表访问1个连接,你会换出你的数据库网络使用。创建连接类,连接细节,最好是静态实现,并将其用作类的组件(组合)。

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

+0

不需要网络连接的Sqlite怎么样? – peterwkc 2010-10-12 11:23:20

+0

不要初始化Sqlite的连接对象。我认为你必须访问网络上的数据库,但仍然有一个单一的表访问多个连接是耗时(建立连接)和浪费资源,并可能压倒连接限制,阻止其他连接。 – DumbCoder 2010-10-12 11:29:03

+0

Sqllite是一个数据库,而不是包装库。 – 2010-10-12 12:34:57

0

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

+0

OTL如何?它与Soci相似吗?谢谢。我觉得它非常有用,但仍然有很多需要解决的问题。 – peterwkc 2010-10-12 11:20:11

+0

我认为我的课堂可以包装Soci图书馆。 – peterwkc 2010-10-12 11:22:47

+0

@peterwkc:之前从未听说过OTL。让我看看它提供了什么... – usta 2010-10-12 11:40:17