连接池以及连接池的使用
目录
什么是连接池?
为什么要使用连接池
连接池分类
连接池的核心对象
连接池对象
连接池工具类,深入理解:
连接池工具类全部代码:
什么是连接池?
- 一种存放数据库连接的容器,并且拥有动态新增连接、管理连接等功能于一体的容器。本质上来说,它就是个容器。
- 原理图示:
可以联想到现在的移动充电宝,需要用的时候随拿随用,用完还。
为什么要使用连接池
- 加快连接的获取速度
- 合理的应用连接
连接池分类
- 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配置文件里面配置这四大核心属性,但实际上是还可以配置其它的很多很多的要素的,这些要素都有默认值。
连接池以及连接池的使用相关推荐
- Http持久连接与HttpClient连接池
以下文章来源方志朋的博客,回复"666"获面试宝典 一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp so ...
- mysql内连接和外连接的区别_Swoole4创建Mysql连接池
一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...
- JDBC:使用连接池管理连接
2019独角兽企业重金招聘Python工程师标准>>> 一.数据库连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显 ...
- 10.线程池与连接池
线程池与连接池 https://www.cnblogs.com/dcz2015/p/5263006.html
- c mysql 关闭连接池_数据库连接池关闭的时间
上一篇说到分析关闭连接与不关闭连接的性能,到后来我发现自己得出的结论有误.经过多次测试发现关闭连接和不关闭连接耗费的时间基本一样.进哥也说了这是有连接池的原因.其实,自己以前对Ado.net了解的不深 ...
- 什么是线程池,连接池,线程池和连接池之间的区别
线程池概念: 线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用 new 线程而是直接去池中拿线程即可,节 省了开辟子线程的时间,提高的代码执行效率. 线程池的优点: 第一:降低资源消耗. ...
- mysql持久连接_持久性连接,短连接和连接池
1.长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了 2.什么时候用长连接,短连接? 长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频 ...
- MySQL之长连接、短连接、连接池(转载:http://www.ywnds.com/?p=9801)
当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信.客户端必须使用数据库连接来发送命令和接收应答.数据.通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了. ...
- 数据库连接池-连接的关闭内幕
们经常会遇到这样那样的连接未关闭的问题,连接没有及时关闭导致的直接后果就是内存泄漏直至down机.我们也都知道解决的方式,但是在解决了问题之后经常会思考为什么会这样呢?连接close()掉,然后在创建 ...
- 连接池,数据库连接池
连接池 连接池是什么? 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用. 连接池的优点 减少连接创建时间 简化的编程模式 受控的资源使用 注:连接池能够使性能最大化, ...
最新文章
- 几种常用的C#排序方法简介
- tomcat服务器两个端口配置两个项目,Tomcat 7通过设置不同的端口部署两个项目
- RabbitMQ使用手册
- touchstart与click同时触发
- css3 transform matrix 深入理解
- linux非编工作站,高清EDIUS非编网络系统建设 在线非编系统
- 10 分钟实现 Spring Boot 发送邮件功能
- mysql怎么查合计_mysql-查询不同列的数量合计
- pythonpm2.5空气质量提醒_Python实现抓取城市的PM2.5浓度和排名
- GRUB系统引导器恢复
- nxp单片机入门_ST、NXP、Microchip、TI、Renesas公司的MCU和MPU定位、性能及特点
- AD1256之STM32程序——STM32测试高精度ADC篇(四)
- Linux 搭建NodeBB社区,搭建CAS登录认证平台,实现Nodebb接入企业CAS认证(二)
- ADF4350调试笔记
- OS X El Capitan 10.11开启性能模式
- 前端关于获取网络时间的方法 api (直接获取时间戳)
- 观周鸿祎先生访谈之后感
- B-树(插入删除)代码+逻辑
- 微信小程序之订单倒计时实现
- JSP的特点与工作流程