首页 > 数据库 >数据库连接池

数据库连接池

时间:2023-10-18 19:00:13浏览次数:31  
标签:数据库 SQL 服务器 客户端 事物 连接池 指针

  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. 数据库连接的复用 在服务端

标签:数据库,SQL,服务器,客户端,事物,连接池,指针
From: https://www.cnblogs.com/lvshy/p/17773100.html

相关文章

  • 通过SQLserver系统存储过程分离和附加数据库的简单使用
    sp_detach_db 数据库分离sp_detach_db 是SQLServer中的一个系统存储过程,用于卸载数据库。使用这个存储过程可以使得数据库不再与当前SQLServer实例关联。以下是 sp_detach_db 的基本语法:sp_detach_db'database_name';其中 'database_name' 是要卸载的数据库的名......
  • 达梦数据库 -2723: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值
    达梦数据库-2723:仅当指定列列表,且SETIDENTITY_INSERT为ON时,才能对自增列赋值 一、问题背景达梦数据库-2723:仅当指定列列表,且SETIDENTITY_INSERT为ON时,才能对自增列赋值  二、问题原因  三、解决方案        ......
  • Mysql 连接池配置问题
     使用SglSugar BulkCopy方法进行大批量插入时一直报错,检查了实体、数据库字段属性都无异常,最后发现数据库连接中配置了 AllowZeroDatetime=true;ConvertZeroDateTime= true;注释后异常解决。  AllowZeroDatetime=true,可以解决的是Mysql中datetime默认值为0000-00......
  • Django修改数据库数据的两种方式
    部分代码展示:fromdjango.shortcutsimportrender,HttpResponse,redirectfromapp01importmodelsdefedit_user(request):#获取url问好后面的参数edit_id=request.GET.get('user_id')#查询当前用户想要编写的数据对象edit_obj=models.User.ob......
  • redis普通连接和连接池, redis字符串类型,redis hash类型, redis列表类型
    1redis普通连接和连接池......
  • python 操作向量数据库qdrant
    qdrant官网:https://qdrant.tech/documentation/overview/两个步骤:1、文本进行向量化2、连接qdrant进行存储步骤一:文本向量化文本向量化可以借助很多现有模型,个人使用bge-large-zhfromsentence_transformersimportSentenceTransformer#模型已下载到本地MODELBGE=Sen......
  • go封装数据库连接池
    packagemainimport("errors""fmt""gorm.io/driver/mysql""gorm.io/gorm")//DBConfig定义一个DBConfig结构体,用于存储数据库连接的配置信息,包括主机地址、端口、用户名、密码和数据库名typeDBConfigstruct{Hoststring//主机地址Portint//......
  • go语言使用单例模式封装数据库连接池
    packagesingledbimport( "gorm.io/driver/mysql" "gorm.io/gorm" "sync")//数据库连接对象只有一个var( db*gorm.DB Oncesync.Once//只执行一次某个操作的机制)funcGetDbInstance()*gorm.DB{ Once.Do(func(){ varerrerror dsn:=&q......
  • IM即时通讯功能mysql数据库设计
    设计一个具备即时消息(IM)功能的数据库需要考虑许多因素,包括用户、消息、聊天室、消息状态等。以下是一个简单的MySQL数据库设计示例,用于支持基本的IM功能:用户表(User)用户ID(UserID)用户名(Username)密码(Password)电子邮件(Email)其他用户相关信息聊天室表(ChatRoo......
  • 数据库
    1.【MySQL】七种JOIN连接详解-CSDN博客这个jion很好理解2.两个表的等联结语法表1.id=表2.id3.当一个表a和表b相关的id不同时,可以创建一个新表,用groupby整理好的表去使用4.mysql不支持outerjoin,所以为什么会有这道题???SQL1035.union去重6.ifnull(a,b)如果a为空则输出b,否则输出a......