- 主要目的都是一样的 包括套接字连接池 避免频繁创建和销毁
- 由来
- 客户端登录服务器去数据库查询 这时就可以把服务器看做是数据库的客户端。
- 一直保持和数据库的连接可以吗?可以但是需要服务器的一个线程来维持,又不做事。耗费资源
-
一个数据库连接需要什么呢
不仅少非自愿,并且减少了时间
- 需要用到的C++技术点
- 多线程编程
- 互斥锁 thread
- 条件变量 某一类加锁解锁 最常用的就是生产者消费者
- 匿名函数 因为线程函数需要一个任务函数,这个任务函数可以是普通函数 也可以是匿名的 也可以是可调用对象
- 11的类似于主动帮我们解锁的智能指针 然后析构自己
- 其他知识
- SQL提供的C语言API
- 单例模式
- STL容器存储数据JSON数据的序列化和反序列化
- 生产者消费者模型
- 步骤一初始化环境
其实就是准备一些数据,这些数据放在一块内存里,我们有一个指针就可以来操作它 注意事物!当我们修改数据库内容时,如果事务提交成功就操作成功,否则就要回滚
- 连接MySQL服务器 最后两个参数用不上
注意是 函数参数的指定,如果连接成功,返回一个和第一个参数同样的指针,指向第一块参数内存
- SQL语句查询 查询的结果保存在SQL服务器上,一个res的数据结构里,二维数组 需要调用函数把它返回到客户端,也就意味着要在客户端开辟内存,所以使用完后应该释放函数指针
- 对结果集里的字段进行操作 _nums_filed fetch_filed 取得表头 不仅存着名字 每一列的name,还有里面值的长度length
有什么用呢?如果是简单地文本字符串,直接读/0就可以,如果是有二进制从中间打断 那么就可以跟据长度准确地拷贝
- 获取单条记录 row返回一个二级指针,一个字符串指针数组,字符串本身就是一级了。可以通过每个字符串的length遍历
如果失败它存储的就是空
- 资源回收
结果集使用完了就是释放,连接完了就回收
- 字符编码 防止中文乱码
设置字符集set 如果不确定我们用到是哪一个字符集可以set——name查询
- 事物! 使用事物的目的就是保证数据库操作的正确性 不是每一次读写都要创建一个事物,那样理解的话就是大错特错! 事物是要执行一定的业务流程,其中肯能包括很多次的读写操作。我们在流程开始之前创建有一个事物,如果这些流程都正确执行了,我们就提交事物,如果失败我们就回滚,回到事物开始之前的状态!回到保存点!快照
- 事物提交与处理 不要让SQL自动提交事物,因为它并不是那么的只能
如果发送错误打印错误信息或者错误码
- 头文件和动态库
- 数据库连接的复用 在服务端