2010-10-12 75 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