【JDBC】学习路径8-连接池
为什么是连接池?
第一、受我们硬件资源的限制,我们的一些资源使用时有限制的比如我们的数据库 连接数和线程数。为了摆脱这些限制,我们就使用了池化技术来将这些资源限制在一定范围内。
第二、我们创建和销毁这些如数据库连接、线程等资源的时候是需要消耗一定的性 能和时间的,使用池化技术可以先初始化一定数量的连接或线程,当我们使用的时候从中取出我们需要的资源,用完后再放回去。避免频繁的创建和销毁。提升整体性能。当我们池中的资源被拿完后我们就需要等待资源释放会池中后再取用,这里就对池的大小和初始化策略要求很高,应该根据具体场景进行选型。
当然了,我们这一节自己创建的连接池只是最为简单的,功能很简单。
意义在于了解连接池的基本流程。
后面我们会使用dbcp和c3p0这两个连接池第三方插件。
开发一个大型网站,咱服务器需要与多个用户进行连接。
与此同时,getConnection()所需的时间相对来说是比较长的。
所以我们最好预先创建好Connection对象,需要的时候直接拿出来用就好。
那么预先创建好的Connection就放在我们的连接池里面。
连接池的容器是:ArrayList
我们在JDBCUtils中创建连接池,并且预先创建多个Connection对象。
第一章:创建对象池
设置一个静态代码块,在程序启动时便会自动运行。
静态代码块中创建5个Connection对象,放在conList中。
调用getConnection()方法,就会从对象池中拿出一个Connection()对象,然后返回出来。
如果对象池空了,则直接再创建一个从Connection对象,返回。
在下一章讲解如何归还Connection。
import java.sql.*;
import java.util.ArrayList;
public class JDBCUtils {
private static final String CURL = "jdbc:mysql://localhost:3306/jdbc_01?useUnicode=true&characterEncoding=UTF8";
private static final String USERNAME = "root";
private static final String PASSWORD = "88888888";
private static ArrayList<Connection> conList = new ArrayList<>();
static {
for (int i = 0 ; i<=5;i++){
Connection con = createConnection();
conList.add(con);
}
}
public static Connection getConnection(){
if (conList.isEmpty()==false){
Connection con = conList.get(0);
conList.remove(con);
return con;
}else
return createConnection();
}
private static Connection createConnection(){
try {
Class.forName("com.mysql.cj.jdbc.Driver");
return DriverManager.getConnection(CURL,USERNAME,PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void close(Connection con, PreparedStatement pstmt, ResultSet rs){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
第二章:归还线程池
我们只需要修改一下close()方法,再使用完后直接将Connection对象给回conList即可。
public static void close(Connection con, PreparedStatement pstmt){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
//归还连接至对象池.
conList.add(con);
}
【JDBC】学习路径8-连接池的更多相关文章
- 走进JavaWeb技术世界3:JDBC的进化与连接池技术
走进JavaWeb技术世界3:JDBC的进化与连接池技术 转载公众号[码农翻身] 网络访问 随着 Oracle, Sybase, SQL Server ,DB2, Mysql 等人陆陆续续住进数据库 ...
- MyBatis学习-使用Druid连接池将Maybatis整合到spring
目录 前言 什么是Druid连接池 Druid可以做什么? 导入库包 连接oracle 连接mysql 导入mybatis 导入druid 导入spring-jdbc包 导入spring包 导入spr ...
- JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)
JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/beans)中建立数据库连接 2)进行sql操作 3)断开数据库连接 ...
- MySQL学习(六)——自定义连接池
1.连接池概念 用池来管理Connection,这样可以重复使用Connection.有了池,我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Connect ...
- 【转】JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)
转自:http://www.cnblogs.com/ysw-go/ JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/ ...
- JDBC数据源 使用JNDI连接池实现数据库的连接
0.引言 许多Web应用程序需要通过JDBC驱动程序访问数据库,以支持该应用程序所需的功能.Java EE平台规范要求Java EE应用程序服务器为此目的提供一个DataSource实现(即,用于JD ...
- JDBC 连接数据库,包含连接池
1.不使用连接池方式(Jdbc) 1.1 工具类(JdbcUtil.java) package com.jdbc.util; import java.io.IOException;import jav ...
- spring boot 学习(四)Druid连接池的使用配置
Druid介绍 Druid是一个JDBC组件,druid 是阿里开源在 github 上面的数据库连接池,它包括三部分: * DruidDriver 代理Driver,能够提供基于Filter-Cha ...
- java学习笔记—c3p0连接池与元数据分析(42)
第一步:导入c3p0包 第二步:在classpath目录下,创建一个c3p0-config.xml <?xml version="1.0" encoding="UT ...
随机推荐
- Centos使用crontab自动定时备份mysql的脚本
在我们网站上线之后免不了需要备份数据库,为什么要备份呢?我给大家列出了3个理由. 1.防止数据丢失 2.防止数据改错了,可以用来恢复 3.方便给客户数据 以 上几点告诉我们要经常备份,当然我今天给大家 ...
- 写个js获取2019博客之星投票活动的名次与投票数
获取投票数 // app.jsvar request = require('request');var cheerio = require('cheerio');request('http://m23 ...
- Elasticsearch学习系列七(Es分布式集群)
核心概念 集群(Cluster) 一个Es集群由多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识 节点(Node) 一个Es实例就是一个Node.Es的配置文件中可以通过node.ma ...
- Pod控制器类型
Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: - 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不 ...
- 漫谈客户端存储技术之Cookie篇
Cookie 说到Cookie,不管作为前端开发人员还是后端开发人员并不陌生,作为一种最古老.最稳定的客户端存储形式,即便是在当下各种新的客户端存储技术层出不穷的时代,它仍旧有其一席之位.Cookie ...
- RS485通信电路
RS485由RS232和RS422发展而来,弥补了抗干扰能力差.通信距离短.速率低的缺点,增加了多点.双向通信能力,即允许多个发送器连接在同一条主线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了 ...
- idea 生成方法注释
/* * * @description: * @author: xuetong.yang * @date: $date$ $time$ $params$ * @return: $return$ */ ...
- ModuleNotFoundError: No module named 'distutils.spawn'
解决办法: 安装python3-distutils sudo apt-get install python3-distutils
- Redis配置与优化
一.缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级.二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据, ...
- 使用OpenCv+Arduino实现挂机自动打怪
使用OpenCv+Arduino实现挂机自动打怪 最近在玩某网游,练级十分枯燥和缓慢,就是挂机刷刷刷,所以研究一下自动化,找了个可以原地挂机刷怪的职业,然后用OpenCv检测技能冷却,冷却好了通过串口 ...