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

MySQL 数据库连接

时间:2023-07-25 18:45:00浏览次数:44  
标签:JDBC 数据库 MySQL Druid SQL 连接 连接池

数据连接:

连接:

MySQL驱动:mysql-connector-Java-XXX.jar

数据库连接的建立及关闭是及耗费系统资源的操作,在多层结构的应用环境中,这种资源的耗费对系统性能影响尤为明显。
通过DriverManager获得数据库连接的方式,一个数据库连接对象对应一个物理数据库连接,每次操作都打开一个物理连接,使用完后立即关闭连接。频繁地打开、关闭连接将造成系统性能低下。

数据库连接池的解决方案是,当应用程序启动时候,系统建立足够多的数据库连接,并将这些连接组成一个连接池。每次应用程序请求数据库连接时,无需重新打开连接,而是从连接池中取出已有的连接使用,使用完后不再关闭数据库连接,而是直接将连接归还给连接池,通过使用连接池将大大提高程序的运行效率。

对于资源共享的情况,有一个通用的设计模式:资源池(Resource Pool),用于解决资源频繁请求释放资源的压力。 JDBC 2.0规范引入了数据库连接池技术。JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由商用服务器(WebLogic,WebSphere)等提供实现,也有一些开源组织提供实现(如JDBC和C3P0等)。DataSource通常被称为数据源,它包含了连接池和连接池管理两个部分,但习惯上已经常把DataSource称为连接池。

两种连接模式:

传统统链接:

  1. 装载数据库驱动程序
  2. 通过JDBC建立数据库连接
  3. 访问数据库 执行SQL语句 (TCP)
    1. 建立连接 连接:三次握手
    2. MySQL认证 认证:三次握手
    3. MySQL执行 执行SQL 返回结果
  4. 断开数据库连接 关闭:四次挥手
image-20210724004735640

连接池链接:

  1. 程序初始化时创建连接池
  2. 使用时向连接池申请可用连接
  3. 使用完毕,将连接返还给连接池
  4. 程序退出时,断开所有连接,并释放资源
image-20210724004909297

连接池:

目的:

使用连接池是为了减少创建数据库连接的开销

数据库连接池负责分配 管理和释放数据库连接 它允许应用程序重复使用一个现有的数据库连接 而不是重新建立一个

基础:

连接池在初始化的时候会创建一定数量的数据库连接放到连接池中
数据库连接的数量 由最小数据库连接数 决定
连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数 超过连接数的请求会加入等待队列
新创建的数据库连接 不会消失 而是放到了连接池中 等待复用或者空闲时间超时后被释放

常见连接池:
  • c3p0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

    • hibernate开发组推荐使用c3p0;
    • c3p0所需jar:c3p0-0.9.2.1.jar mchange-commons-java-0.2.3.4.jar
  • DBCP是 apache 上的一个 java 连接池项目,是一个依赖Jakarta commons-pool 对象池

    机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP

    • dbcp所需jar:commons-dbcp.jarcommons-pool.jar
  • Druid是阿里巴巴出品的数据源 而且是淘宝和支付宝专用数据库连接池 但它不仅仅是一个数据库连接池 它还包含一个ProxyDriver 一系列内置的JDBC组件库 一个 SQL Parser

    1. Druid是阿里开源的连接池 可以说是Java语言中最好的数据库连接池 Druid能够提供强大的日志监控扩展功能,是为监控而生的数据库连接池!【主要是监控DB池连接和SQL的执行情况
    2. Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
    3. Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便
    4. 简单SQL语句执行耗时10微秒以内,复杂SQL耗时30微秒
    5. 通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。
    6. Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。

标签:JDBC,数据库,MySQL,Druid,SQL,连接,连接池
From: https://www.cnblogs.com/AnotherVincent/p/17580636.html

相关文章

  • MySQL 容灾备份
    容灾备份:数据备份:直接对数据库进行备份:#数据库备份语句#不指定表名的话默认就是整个数据库备份#备份文件可以指定绝对路径mysqldump-u[用户名]-p[库名][表名]...>[备份文件.sql]#多个数据库备份语句mysqldump-u[用户名]-p--databases[库名][库名]......
  • 数据库 SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 解决方法
    消息824,级别24,状态2,第35行SQLServer检测到基于一致性的逻辑I/O错误校验和不正确(应为:0xafd28414,但实际为:0x84d07fc6)。在文件'D:\back\U9TEST1_Data.mdf'中、偏移量为0x00000a3cde4000的位置对数据库ID17中的页(1:5367538)执行读取期间,发生了该错误。SQL......
  • MySQL 索引
    索引分析:索引概述:定义:MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。结论:索引是数据结构结构:MySQL支持多种存储引擎而各种存储引擎对索引的支持也各不相同因此MySQL数据库支持多种索引类型如BTree索引、哈希索引、全文索引等等目前大部分数据库......
  • kettle连接数据库报错:Error connecting to database: (using class org.gjt.mm.mysql.
    kettle连接MySQL报错但已经把相应的包放到kettle的lib目录下时,仍然报连接不上的错误,那可能是MySQL时区的问题。解决如下:登入MySQL修改为东八区的命令:方法一:mysql>setglobalmax_allowed_packet=1024*1024;mysql>setglobaltime_zone='+8:00';方法二:修改my.ini文件,在[mysql......
  • Mysql开启慢查询日志
    查看mysql的慢查询日志是否开启showvariableslike'%query%';  可以看到slow_query_log的值是OFF,mysql默认是不启用慢查询日志的。这里还有个long_query_time,默认是10秒,也就是超过了10秒即为慢查询。log_queries_not_using_indexes,如果设置为ON,则会将所有没有使用索引的查......
  • mysql 中 myisam 与 innodb 的区别?
     1.事务支持>MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。>InnoDB:提供事务支持事务,外部键等高级数据库功能。具有事务(commit)、回滚(rollback)和崩溃修复能力(crashrecoverycapabilities)的事务安全(transaction-safe(......
  • sql server 得到数据库所有表名
    SQLServer:获取数据库所有表名在SQLServer中,我们经常需要获取数据库中所有表的名称。这对于进行数据库分析、数据导出以及其他操作非常有用。本文将介绍如何使用SQLServer查询来获取数据库中的所有表名。使用系统视图SQLServer提供了一些系统视图,可以帮助我们获取数据库......
  • springboot mysql 配置 propertis
    SpringBootMySQL配置Properties在SpringBoot应用程序中,我们经常需要使用MySQL数据库来存储和检索数据。为了连接和配置MySQL数据库,我们可以使用application.properties文件。这篇文章将向您展示如何使用SpringBoot的application.properties文件来配置MySQL数据库连接。1.引......
  • 允许任意IP访问mysql数据库
    问题描述MYSQL默认只能本地连接,即127.0.0.1和localhost,其他主机IP无法访问数据库,否则会出现如下报错信息:HostisnotallowedtoconnecttothisMySQLserver一、先在本地用localhost用户登录MYSQLmysql>mysql-hlocalhost-uroot-p1二、查询用户表mysql>selecthost,us......
  • (五) MdbCluster分布式内存数据库——数据迁移架构及节点扩缩容状态图
    (五)MdbCluster分布式内存数据库——数据迁移架构及节点扩缩容状态图 上一篇:(四)MdbCluster分布式内存数据库——业务消息处理本节主要讨论在系统扩容期间的数据迁移架构及节点的状态图。我们将通过介绍这两部分,慢慢展开复杂的扩缩容流程。下图从左到右,我们增......