目录

什么是连接池?

为什么要使用连接池

连接池分类

连接池的核心对象

连接池对象

连接池工具类,深入理解:

连接池工具类全部代码:


什么是连接池?

  • 一种存放数据库连接的容器,并且拥有动态新增连接、管理连接等功能于一体的容器。本质上来说,它就是个容器。
  • 原理图示:

可以联想到现在的移动充电宝,需要用的时候随拿随用,用完还。


为什么要使用连接池

  • 加快连接的获取速度
  • 合理的应用连接

连接池分类

  • dbcp
  • c3p0
  • druid
  • hikaricp(常用,连接速度最快)

......

连接池的核心对象

连接池的核心对象是DataSource,所有的连接池都要继承DataSource。

连接池对象

此代码对应的数据库以及表格


/*** 1、导包* 2、创建连接池对象* 3、从连接池中获取连接* 4、使用连接* 5、回收连接*/public class Demo {public static void main(String[] args) throws Exception {//1、创建连接池对象HikariDataSource hikariDataSource = new HikariDataSource();//驱动hikariDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");//统一资源定位符(jdbc:mysql:///jdbc(数据库名)?severTimezone=UTC(更改时区)hikariDataSource.setJdbcUrl("jdbc:mysql:///jdbc?serverTimezone=UTC");//Mysql账号密码hikariDataSource.setUsername("root");        hikariDataSource.setPassword("root");    //2、获取连接Connection connection = hikariDataSource.getConnection();//使用JDBC工具类输,入sql语句,得到数据库中表中的字段的值ResultSet resultSet = DBUtils.executeQuery("select * from t_user", connection);while (resultSet.next()){System.out.println(resultSet.getString("name"));}//3、回收连接hikariDataSource.evictConnection(connection);}}

深入理解连接池工具类:

由HikariDataSource的源码可以看到,是它接收HikariConfig配置类的hikariConfig对象


new一个HikariConfig配置类的对象让HikariDataSource接收


由源码看到,HikariConfig配置类可以接收Properties对象


同理,new一个Properties对象给HikariConfig配置类接收


需要更改工具类的连接


获取t_user表中字段的数量


连接池工具类全部代码:

package blb.connectionPool;import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;import java.sql.*;
import java.util.Properties;/**** 工具类*/
public class DBUtils {//驱动private static String driverClass = "com.mysql.cj.jdbc.Driver";//统一资源定位符(jdbc:mysql:///jdbc(数据库名)?serverTimezone=UTC(更改时区))private static String url="jdbc:mysql:///jdbc?serverTimezone=UTC";private static String username = "root";private static String password = "root";private static HikariDataSource hikariDataSource;/*** 驱动*/static {Properties properties = null;try {properties = new Properties();//这里用的jdbc.properties配置文件            properties.load(DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));    driverClass = properties.getProperty("driverClassName");url = properties.getProperty("jdbcUrl");username = properties.getProperty("username");password = properties.getProperty("password");} catch (Exception e) {e.printStackTrace();System.out.println("未找到配置文件,使用默认配置!!");properties.setProperty("driverClassName",driverClass);properties.setProperty("jdbcUrl",url);properties.setProperty("username",username);properties.setProperty("password",password);}//初始化连接池对象HikariConfig hikariConfig = new HikariConfig(properties);   //hikari是最快的连接池,所以用它hikariDataSource= new HikariDataSource(hikariConfig);try {Class.forName(driverClass);} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 让每一个都获取一个连接* @return* @throws Exception*/public static Connection getConnection() throws  Exception{return hikariDataSource.getConnection();}/*** 查询方法* @param sql* @param connection* @throws SQLException* @return*/public static ResultSet executeQuery(String sql, Connection connection,Object ...params) throws SQLException {//获取预处理对象PreparedStatement preparedStatement = connection.prepareStatement(sql);//设置参数for (int i = 0; i <params.length ; i++) {preparedStatement.setObject(i+1,params[i]);}//执行sqlreturn preparedStatement.executeQuery();}/*** 执行增删改方法* @param sql* @param connection* @param params* @throws SQLException*/public static int execute(String sql,Connection connection,Object... params) throws SQLException {//获取预处理对象PreparedStatement preparedStatement = connection.prepareStatement(sql);//设置参数for (int i = 0; i <params.length ; i++) {preparedStatement.setObject(i+1,params[i]);}//执行sqlint len = preparedStatement.executeUpdate();return len;}
}

拓展

由HiKariConfig的源码可以看到,连接池除了在properties配置文件里面配置这四大核心属性,但实际上是还可以配置其它的很多很多的要素的,这些要素都有默认值。

连接池以及连接池的使用相关推荐

  1. Http持久连接与HttpClient连接池

    以下文章来源方志朋的博客,回复"666"获面试宝典 一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp so ...

  2. mysql内连接和外连接的区别_Swoole4创建Mysql连接池

    一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...

  3. JDBC:使用连接池管理连接

    2019独角兽企业重金招聘Python工程师标准>>> 一.数据库连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显 ...

  4. 10.线程池与连接池

    线程池与连接池 https://www.cnblogs.com/dcz2015/p/5263006.html

  5. c mysql 关闭连接池_数据库连接池关闭的时间

    上一篇说到分析关闭连接与不关闭连接的性能,到后来我发现自己得出的结论有误.经过多次测试发现关闭连接和不关闭连接耗费的时间基本一样.进哥也说了这是有连接池的原因.其实,自己以前对Ado.net了解的不深 ...

  6. 什么是线程池,连接池,线程池和连接池之间的区别

    线程池概念: 线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用 new 线程而是直接去池中拿线程即可,节 省了开辟子线程的时间,提高的代码执行效率. 线程池的优点: 第一:降低资源消耗. ...

  7. mysql持久连接_持久性连接,短连接和连接池

    1.长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了 2.什么时候用长连接,短连接? 长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频 ...

  8. MySQL之长连接、短连接、连接池(转载:http://www.ywnds.com/?p=9801)

    当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信.客户端必须使用数据库连接来发送命令和接收应答.数据.通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了. ...

  9. 数据库连接池-连接的关闭内幕

    们经常会遇到这样那样的连接未关闭的问题,连接没有及时关闭导致的直接后果就是内存泄漏直至down机.我们也都知道解决的方式,但是在解决了问题之后经常会思考为什么会这样呢?连接close()掉,然后在创建 ...

  10. 连接池,数据库连接池

    连接池 连接池是什么? 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用. 连接池的优点 减少连接创建时间 简化的编程模式 受控的资源使用 注:连接池能够使性能最大化, ...

最新文章

  1. 几种常用的C#排序方法简介
  2. tomcat服务器两个端口配置两个项目,Tomcat 7通过设置不同的端口部署两个项目
  3. RabbitMQ使用手册
  4. touchstart与click同时触发
  5. css3 transform matrix 深入理解
  6. linux非编工作站,高清EDIUS非编网络系统建设 在线非编系统
  7. 10 分钟实现 Spring Boot 发送邮件功能
  8. mysql怎么查合计_mysql-查询不同列的数量合计
  9. pythonpm2.5空气质量提醒_Python实现抓取城市的PM2.5浓度和排名
  10. GRUB系统引导器恢复
  11. nxp单片机入门_ST、NXP、Microchip、TI、Renesas公司的MCU和MPU定位、性能及特点
  12. AD1256之STM32程序——STM32测试高精度ADC篇(四)
  13. Linux 搭建NodeBB社区,搭建CAS登录认证平台,实现Nodebb接入企业CAS认证(二)
  14. ADF4350调试笔记
  15. OS X El Capitan 10.11开启性能模式
  16. 前端关于获取网络时间的方法 api (直接获取时间戳)
  17. 观周鸿祎先生访谈之后感
  18. B-树(插入删除)代码+逻辑
  19. 微信小程序之订单倒计时实现
  20. JSP的特点与工作流程

热门文章

  1. 合成大西瓜小游戏微信小程序源码
  2. Unity 历史版本下载
  3. openshift Tekton pipeline 实践
  4. scratch词语接龙 电子学会图形化编程scratch等级考试四级真题和答案解析2021-6
  5. python中的除法,取整和求模
  6. wish平台怎么样?wish跨境电商好做吗?
  7. ubuntu U盘只读的修复办法
  8. VS中SVN的简介、安装和使用(安装+汉化+使用)
  9. 什么叫MD5,MD5通常做什么用处,为什么MD5不可逆,用做密码加密的时候仍然可能会被解密?
  10. 计算机b级考试题型分值分布,大学英语四级考试题型和分值分配