【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 ...
随机推荐
- Amazon 消息订阅对接
亚马逊的api 谁用谁知道...... 除了坑还是坑 头疼一周整出来,分享给铁汁们 amazon 的订阅思维,我只能说外国人脑回路有点长 下面就讲讲具体流程步骤: 第一步: 参照官方教程:设置通知(A ...
- 24.Haproxy搭建Web群集
Haproxy搭建Web群集 目录 Haproxy搭建Web群集 Haproxy简介 常见的Web集群调度器 软件类 硬件类 Haproxy应用分析 HAProxy的主要特性 HAProxy常见的8种 ...
- 一文理解OpenStack网络
摘要:如果你能理解OpenStack的网络,那么对于其他云平台的网络,应该也可以通过分析后理解掌握了. 本文分享自华为云社区<<跟唐老师学习云网络> - OpenStack网络实现& ...
- ABAP CDS - DEFINE VIEW, name_list
Syntax ... ( name1, name2, ... ) ... Effect Defines the element names of a CDS view in ABAP CDS in a ...
- zabbix通过invoke调用监控服务可用性
1. 通过脚本判断线上服务是否可用 telnet 127.0.0.1 端口 #线上调用的是使用的dubbo端口 通过invoke 抓取返回的code值,脚本如下 #返回code:0则视为正常,返回其他 ...
- [BJDCTF2020]The mystery of ip|[CISCN2019 华东南赛区]Web11|SSTI注入
记录一下BUUCTF中两个类似的SSTI注入关卡 [BJDCTF2020]The mystery of ip-1: 1.打开之后显示如下: 2.在hint.php中进行了相关提示,如下: 3.既然获取 ...
- Spring框架系列(14) - SpringMVC实现原理之DispatcherServlet处理请求的过程
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet ...
- Oracle数据库常用查询语句
1.[oracle@dbserver ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Tue Mar 15 15:1 ...
- 查询postgresql表结构和索引
通过系统数据字典查询表结构 selectcol.table_schema,col.table_name,col.ordinal_position,col.column_name,col.data_ty ...
- OGC WebGIS 常用服务标准(WMS/WMTS/TMS/WFS)速查
本文只介绍实际工作中常用的 WMS.WMTS.WFS.TMS 四种,WCS.WPS 等其它 OGC WebService 类型请自行查阅官方资料. 目录 0. 参数传递方式 1. WMS 速查 1.1 ...