首先有多线程,然后每个线程都会调用一个数据库操作的共用类,现在有如下疑惑

lijian910wolf 2017-11-11 09:18:56
_ConnectionPtr m_pConnect;
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
请问大家,上面三个变量,是定义全局变量好,整套系统一次连接数据库就好,还是说每个线程进来操作数据库时就创建一个链接
用完然后关闭掉释放资源?
谢谢!
...全文
2584 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijian910wolf 2019-04-04
  • 打赏
  • 举报
回复
引用 29 楼 向立天 的回复:
都一年多了,你再开一个帖子吧

也是
lijian910wolf 2019-04-04
  • 打赏
  • 举报
回复
引用 17 楼 赵4老师 的回复:
[quote=引用 13 楼 zhao4zhong1 的回复:]
一个线程对应一个数据库连接。

正解![/quote]

引用 18 楼 向立天 的回复:
[quote=引用 7 楼 lijian910wolf 的回复:]
[quote=引用 6 楼 xianglitian 的回复:]
如果是我的话用全局只连接一次数据库
不用等时候就关闭

你的意思是系统启动后就连接数据库,然后系统退出才关闭,中间除了数据库链接断开了重连的话,其他任何线程要操作比方增删改的动作都不需要连接数据库这个操作?
这样会不会有问题?[/quote]
我不是系统退出的时候关闭,是所有操作数据库的线程通过一个全局变量来实现处理
用的时候连接不用的时候断开
使用之前先检查一下连接状态,如果正在打开状态说明有人在操作就等一会儿
这样相当于加了多线程的访问限制[/quote]

引用 8 楼 smwhotjay 的回复:
可以借鉴下我的ado封装类

http://blog.csdn.net/smwhotjay/article/details/77930751

class CMFCADO  
{
public:
CMFCADO(void);
~CMFCADO(void);

//通过文件路径打开mdb数据库
bool OpenConn(LPCTSTR mdb_filepath);

void CloseConn();

bool CMFCADO::GetRecordSet(LPCTSTR bstrSQL);

bool CMFCADO::ExecuteSQL(LPCTSTR bstrSQL);

void CloseRecordset(void);

_RecordsetPtr m_pRS;//添加一个指向RecordSet对象的指针

private:


_ConnectionPtr m_pConnection;//添加一个指向Connection对象的指针

};




不好意思,隔的太久没搞开发了。
最近又玩这个了,现在有个现象,数据高并发进来后,分给线程去处理把数据存储到数据库里,发现,N条数据已经并发接收完了,但是数据却没有全部存储完到数据库,延时比较大,这个有什么方法,让并发接收完数据的同时,没多久就数据全部存储完到数据库里?
或者用数据库无法做到此功能有什么方法做到此功能
向立天 2019-04-04
  • 打赏
  • 举报
回复
都一年多了,你再开一个帖子吧
lijian910wolf 2019-04-03
  • 打赏
  • 举报
回复
不好意思,隔的太久没搞开发了。
最近又玩这个了,现在有个现象,数据高并发进来后,分给线程去处理把数据存储到数据库里,发现,N条数据已经并发接收完了,但是数据却没有全部存储完到数据库,延时比较大,这个有什么方法,让并发接收完数据的同时,没多久就数据全部存储完到数据库里?
或者用数据库无法做到此功能有什么方法做到此功能
sichuanwww 2018-05-04
  • 打赏
  • 举报
回复
业务需求决定使用规则。 多线程,各自负责,谁打开谁关闭,尽可能使用短连接。
赵4老师 2018-05-03
  • 打赏
  • 举报
回复
没有银弹! 所以AI永远代替不了码农!
hhhh63 2018-05-03
  • 打赏
  • 举报
回复
对,要考虑中间断线的情况,不管是一次连接或多个连接都要考虑这个情况。
赵4老师 2018-05-02
  • 打赏
  • 举报
回复
引用 22 楼 hhhh63 的回复:
一次连接数据库
中间断开了不自动重连?
待续_1006 2018-05-02
  • 打赏
  • 举报
回复
条条大道通罗马,没有最好,只能根据你的需求选择最适合 类似上面说的只有一次连接,那么多线程的情境下,要考虑数据同步,检测数据库连接状态 等等。。。。
hhhh63 2018-05-01
  • 打赏
  • 举报
回复
一次连接数据库
赵4老师 2018-05-01
  • 打赏
  • 举报
回复
百度搜“线程池 socket连接池 数据库连接池”
lijian910wolf 2018-04-30
  • 打赏
  • 举报
回复
不好意思各位;中间几个月有事没弄,感谢各位的回复建议; 项目需求是这样的,当前是服务器程序,用的是完成端口的方式,系统运行时就默认创建了几个线程。 有socket连接跟数据进来时,就需要将客户端来的数据与数据库进行交互。 因为可能同时并发N个客户,那需要同时把数据存到数据库里,现在服务器与数据库的连接这块不确定用哪种方案更好。 1,楼上有朋友说,比方刚才系统启动就默认建了几个线程,那么连接数据库这个也默认创建几个线程,整成一个线程池。 2.。楼上也有朋友说,整个就是用连接,然后用同步锁防止线程间数据紊乱 3.。楼上也有朋友说,将数据操作封装成类,有socket连接进来时,就new一下数据操作类,也就是打开数据库 操作数据库 用完了对象关闭,数据库链接也关闭 等 哪个相对更优点呢? 感谢
走好每一步 2017-11-18
  • 打赏
  • 举报
回复
一个线程对应一个连接会好一些吧。 可以整一个连接池。
向立天 2017-11-18
  • 打赏
  • 举报
回复
引用 7 楼 lijian910wolf 的回复:
[quote=引用 6 楼 xianglitian 的回复:] 如果是我的话用全局只连接一次数据库 不用等时候就关闭
你的意思是系统启动后就连接数据库,然后系统退出才关闭,中间除了数据库链接断开了重连的话,其他任何线程要操作比方增删改的动作都不需要连接数据库这个操作? 这样会不会有问题?[/quote] 我不是系统退出的时候关闭,是所有操作数据库的线程通过一个全局变量来实现处理 用的时候连接不用的时候断开 使用之前先检查一下连接状态,如果正在打开状态说明有人在操作就等一会儿 这样相当于加了多线程的访问限制
赵4老师 2017-11-16
  • 打赏
  • 举报
回复
引用 13 楼 zhao4zhong1 的回复:
一个线程对应一个数据库连接。
正解!
Sandrer 2017-11-14
  • 打赏
  • 举报
回复
我习惯 _ConnectionPtr 只设一个为全局的, 其它游标存储过程那些就用的时候才申请打开
Eleven 2017-11-13
  • 打赏
  • 举报
回复
只连接一次,断开一下,其它时候公用,注意同步~
赵4老师 2017-11-13
  • 打赏
  • 举报
回复
一个线程对应一个数据库连接。
向立天 2017-11-11
  • 打赏
  • 举报
回复
如果是我的话用全局只连接一次数据库 不用等时候就关闭
worldy 2017-11-11
  • 打赏
  • 举报
回复
可以共用,但是必须排他使用,必须使用同步机制,一个线程在使用的时候,其他线程必须等待,直到释放
加载更多回复(9)

4,011

社区成员

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

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