求数据库连接池代码

reality 2008-11-03 09:40:08
多线程的情况下,使用同一个数据库连接,程序会出错。
我觉得一个数据库连接池可以解决这个问题。
因为没有写过这个东西,所以望得到一段代码用于借鉴。
谢谢大家。
...全文
107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongqi162 2008-11-03
  • 打赏
  • 举报
回复
hongqi162 2008-11-03
  • 打赏
  • 举报
回复
Using ODBC Connection Pooling with CDatabase (under MFC)



#if !defined( __CPDATABASE_H_ )
#define __CPDATABASE_H_

#pragma warning (disable : 4127) // conditional expression is constant

class CCPDatabase : public CDatabase
{
public:
/**/ CCPDatabase()
{
};
//
// Code Is Copied From CDatabase Source Code...
//
virtual BOOL OpenEx( LPCTSTR lpszConnectString, DWORD dwOptions = 0 )
{
dwOptions |= noOdbcDialog; // Force NoDialog Flag For Connection Pooling

ASSERT_VALID(this);
ASSERT(lpszConnectString == NULL || AfxIsValidString(lpszConnectString));
ASSERT(!(dwOptions & noOdbcDialog && dwOptions & forceOdbcDialog));

// Exclusive access not supported.
ASSERT(!(dwOptions & openExclusive));

m_bUpdatable = !(dwOptions & openReadOnly);

TRY
{
m_strConnect = lpszConnectString;

// Allocate the HDBC and make connection
AllocConnect(dwOptions);
if(!Connect(dwOptions))
return FALSE;

// Verify support for required functionality and cache info
VerifyConnect();
GetConnectInfo();
}
CATCH_ALL(e)
{
Free();
THROW_LAST();
}
END_CATCH_ALL

return TRUE;
}
};


#pragma warning (disable : 4127) // conditional expression is constant


#endif // __CPDATABASE_H_
僵哥 2008-11-03
  • 打赏
  • 举报
回复
先找出出错的原因.连接池只是为了在多线程并非任何时候都需要访问数据库的情况下,重用数据库连接,从而减少数据库连接的建立的消耗.另外就是数据库连接是有限的,并且数据库需要为每一个数据库连接分配和管理相应的资源,使用连接池可以很好的控制总的连接数,以减缓数据库的压力.在使用连接池的前提是使用独立的连接不出现问题,并且还需要注意,在A线程建立的数据库连接,应该在B线程当中也同样拥有使用权限.
内存泄漏 2008-11-03
  • 打赏
  • 举报
回复
多线程的情况下,使用同一个数据库连接,程序会出错。

不会有这样的问题啊。。你用的什么数据库?一般数据库都支持多线程访问的。
reality 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hongqi162 的回复:]
Connection Pool in a Static Library
[/Quote]
看了,没有看明白。。。

4,017

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧