是可以做到安全如下:管理在C全局DB連接++
我有一個連接到SQL數據庫在不同的點一個C++庫。我希望在所有這些點上都有一個全球連接。這可以做到嗎?有這樣的標準模式。我正在考慮以單身存儲連接。
編輯: 假設我有以下連接接口。
class Connection {
public:
Connection();
~Connection();
bool isOpen();
void open();
}
我想實現以下接口:
class GlobalConnection {
public:
static Connection & getConnection() {
static Connection conn_;
if (!conn_.isOpen())
conn_.open();
return conn_;
}
private:
GlobalConnection() {};
Connection conn_;
};
我有兩個問題與上面。一個是getConnection不是線程安全的,另一個是我不確定靜態資源的銷燬。換句話說,我保證連接會關閉(即它的析構函數會被調用)。
爲了記錄,連接類本身由SQLAPI ++庫提供(儘管這不是很相關)。
編輯2:之後做一些研究似乎同時SQLAPI doent直接支持池可以用來啓用連接通過電話
setOption("SQL_ATTR_CONNECTION_POOLING") = SQL_CP_ONE_PER_DRIVER
的文檔通過ODBC設施池說,這個調用必須在第一次連接建立之前建立。用多個潛在呼叫站點來打開連接的代碼中保證這一點的最佳方法是什麼?如果這沒有發生?將拋出一個錯誤或池不會被啓用。
還有哪些工具可用於監視數據庫有多少個打開的連接?
如果你打算只有一個全局連接,Singleton模式可能是一個選項。 – user1192525 2012-03-15 22:29:07