您的位置:程序门 -> vc/mfc -> 进程/线程/dll



请教数据库连接池的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请教数据库连接池的问题[已结贴,结贴人:neversaydie518]
发表于:2007-09-27 16:34:56 楼主
小弟现在要做一个数据库连接池,设置一个连接对象类,该类用一个handle类型成员来存放一个event对象,来实现对该连接对象的互斥访问。用vector容器实现一个连接池,池内存放连接类对象。容器初始化后有50个元素。初始化的时候创建event对象,并设置一个数组hevent来存放event对象句柄,每次请求连接数据库时,调用waitformultipleobjects来获取一个对象。
现在的问题是如果当前使用的连接超过50个,就添加一个连接到连接池中,但是这个添加的连接对象的event对象句柄没有办法动态添加到句柄数组中,也就不能使用waitformultipleobjects了。该怎样做呢?
想过用map容器,但是好象也会遇到这个问题。该怎么设计呢?
发表于:2007-09-28 08:42:251楼 得分:0
前辈们,帮忙啊
发表于:2007-09-28 12:01:392楼 得分:30
你可以换换思路,不一定非要事件处理。可以考虑其它的方法。

一般连接池和线程池在一起使用。

整个程序创建一个线程池,在每个线程上创建一个数据库连接(一个线程一个数据库连接)。这样就没有任何问题了。
怎样保证在一个线程上创建一个数据库连接呢?你把数据库处理封装成一个类,在这个线程上new一个类对象,并把他以线程本地存储的方式存储起来,当每次使用数据库时,从线程本地存储中取出来。
发表于:2007-09-28 12:44:213楼 得分:0
那是不是每次调用线程函数的时候都要重新连接数据库呢?
发表于:2007-09-28 13:09:174楼 得分:0
如果用线程池的话,要定期检查当前连接池中所有连接的当前状态该怎么实现呢?
小弟没有使用过线程池,希望前辈赐教
发表于:2007-09-29 11:03:145楼 得分:0
一个线程一个数据库连接,只要线程还存在连接就不断,当线程结束时最好释放数据库连接类对象(当然如果是在退出程序才结束线程就可以不用释放)。

当每次使用时先从线程本地存储中取出数据库连接类对象,在做数据库操作是先ping数据库,如果成功则调用操作,如果失败,才释放此对象(delete)并重新new一个,再存储到本地存储中去。
发表于:2007-09-29 11:05:496楼 得分:0
当每次使用时先从线程本地存储中取出数据库连接类对象,在调用数据库操作时先ping数据库(mysql有api提供),如果成功则调用数据库操作;如果失败,则释放此对象(delete)并重新new一个再存储到本地存储中去。


快速检索

最新资讯
热门点击