数据库连接池

发布时间 2023-10-18 19:00:53作者: SunShine789
  1. 主要目的都是一样的 包括套接字连接池 避免频繁创建和销毁
  2. 由来 
    1.   客户端登录服务器去数据库查询 这时就可以把服务器看做是数据库的客户端。
    2. 一直保持和数据库的连接可以吗?可以但是需要服务器的一个线程来维持,又不做事。耗费资源

    3. 一个数据库连接需要什么呢

      不仅少非自愿,并且减少了时间

  3. 需要用到的C++技术点
    1.   多线程编程
    2. 互斥锁 thread
    3. 条件变量  某一类加锁解锁  最常用的就是生产者消费者
    4. 匿名函数  因为线程函数需要一个任务函数,这个任务函数可以是普通函数 也可以是匿名的 也可以是可调用对象
    5. 11的类似于主动帮我们解锁的智能指针 然后析构自己
  4. 其他知识
    1.   SQL提供的C语言API
    2. 单例模式
    3. STL容器存储数据JSON数据的序列化和反序列化

  1. 生产者消费者模型

 

  1. 步骤一初始化环境

     其实就是准备一些数据,这些数据放在一块内存里,我们有一个指针就可以来操作它  注意事物!当我们修改数据库内容时,如果事务提交成功就操作成功,否则就要回滚

  2. 连接MySQL服务器  最后两个参数用不上

     

     注意是 函数参数的指定,如果连接成功,返回一个和第一个参数同样的指针,指向第一块参数内存

  3. SQL语句查询  查询的结果保存在SQL服务器上,一个res的数据结构里,二维数组 需要调用函数把它返回到客户端,也就意味着要在客户端开辟内存,所以使用完后应该释放函数指针

     

  4. 对结果集里的字段进行操作 _nums_filed fetch_filed 取得表头 不仅存着名字  每一列的name,还有里面值的长度length

     

     有什么用呢?如果是简单地文本字符串,直接读/0就可以,如果是有二进制从中间打断 那么就可以跟据长度准确地拷贝

  5. 获取单条记录  row返回一个二级指针,一个字符串指针数组,字符串本身就是一级了。可以通过每个字符串的length遍历

     如果失败它存储的就是空

  6. 资源回收

     结果集使用完了就是释放,连接完了就回收

  7. 字符编码 防止中文乱码

     设置字符集set 如果不确定我们用到是哪一个字符集可以set——name查询

  8. 事物!  使用事物的目的就是保证数据库操作的正确性  不是每一次读写都要创建一个事物,那样理解的话就是大错特错! 事物是要执行一定的业务流程,其中肯能包括很多次的读写操作。我们在流程开始之前创建有一个事物,如果这些流程都正确执行了,我们就提交事物,如果失败我们就回滚,回到事物开始之前的状态!回到保存点!快照

     

  9. 事物提交与处理 不要让SQL自动提交事物,因为它并不是那么的只能

     

     如果发送错误打印错误信息或者错误码

  10. 头文件和动态库

     

  11. 数据库连接的复用 在服务端