为什么是连接池?

第一、受我们硬件资源的限制,我们的一些资源使用时有限制的比如我们的数据库 连接数和线程数。为了摆脱这些限制,我们就使用了池化技术来将这些资源限制在一定范围内。

第二、我们创建和销毁这些如数据库连接、线程等资源的时候是需要消耗一定的性 能和时间的,使用池化技术可以先初始化一定数量的连接或线程,当我们使用的时候从中取出我们需要的资源,用完后再放回去。避免频繁的创建和销毁。提升整体性能。当我们池中的资源被拿完后我们就需要等待资源释放会池中后再取用,这里就对池的大小和初始化策略要求很高,应该根据具体场景进行选型。

当然了,我们这一节自己创建的连接池只是最为简单的,功能很简单。

意义在于了解连接池的基本流程。

后面我们会使用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-连接池的更多相关文章

  1. 走进JavaWeb技术世界3:JDBC的进化与连接池技术

    走进JavaWeb技术世界3:JDBC的进化与连接池技术 转载公众号[码农翻身] 网络访问 随着 Oracle, Sybase, SQL Server ,DB2,  Mysql 等人陆陆续续住进数据库 ...

  2. MyBatis学习-使用Druid连接池将Maybatis整合到spring

    目录 前言 什么是Druid连接池 Druid可以做什么? 导入库包 连接oracle 连接mysql 导入mybatis 导入druid 导入spring-jdbc包 导入spring包 导入spr ...

  3. JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)

    JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/beans)中建立数据库连接 2)进行sql操作 3)断开数据库连接 ...

  4. MySQL学习(六)——自定义连接池

    1.连接池概念 用池来管理Connection,这样可以重复使用Connection.有了池,我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Connect ...

  5. 【转】JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)

    转自:http://www.cnblogs.com/ysw-go/ JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/ ...

  6. JDBC数据源 使用JNDI连接池实现数据库的连接

    0.引言 许多Web应用程序需要通过JDBC驱动程序访问数据库,以支持该应用程序所需的功能.Java EE平台规范要求Java EE应用程序服务器为此目的提供一个DataSource实现(即,用于JD ...

  7. JDBC 连接数据库,包含连接池

    1.不使用连接池方式(Jdbc) 1.1 工具类(JdbcUtil.java) package com.jdbc.util; import java.io.IOException;import jav ...

  8. spring boot 学习(四)Druid连接池的使用配置

    Druid介绍 Druid是一个JDBC组件,druid 是阿里开源在 github 上面的数据库连接池,它包括三部分: * DruidDriver 代理Driver,能够提供基于Filter-Cha ...

  9. java学习笔记—c3p0连接池与元数据分析(42)

    第一步:导入c3p0包 第二步:在classpath目录下,创建一个c3p0-config.xml <?xml version="1.0" encoding="UT ...

随机推荐

  1. Ubuntu安装python固定版本

    一. 安装python3.7 本篇文章使用python3.7安装步骤为例 1.直接使用apt-get安装python3.7 apt-get install python3.7 该方法经常会出现unab ...

  2. 【Spring】事务的执行原理(二)

    前置知识 事务的执行步骤如下: 获取事务管理器 创建事务 执行目标方法 捕捉异常,如果出现异常进行回滚 提交事务 public abstract class TransactionAspectSupp ...

  3. 6.文本三剑客之sed

    文本三剑客之sed 目录 文本三剑客之sed sed编辑器 sed概述 sed工作流程 sed用法 sed打印 sed删除 sed替换 sed增加行内容 sed剪切粘贴与复制粘贴 sed字符/字符串交 ...

  4. React技巧之组件中返回多个元素

    原文链接:https://bobbyhadz.com/blog/react-return-multiple-elements 作者:Borislav Hadzhiev 正文从这开始~ fragment ...

  5. UiPath Level3讲解

    匠厂出品,必属精品   Uipath中文社区qq交流群:465630324 uipath中文交流社区:https://uipathbbs.com RPA之家qq群:465620839 第一课--UiP ...

  6. VisionPro · C# · 卸载相机

    在项目程序关闭前,需要将之前链接上的相机全部卸载,否则,关闭程序将出现弹窗报错. 解决报错,卸载相机代码如下: using System; using System.Windows.Forms; us ...

  7. 『现学现忘』Git后悔药 — 29、版本回退git reset --mixed命令说明

    git reset --mixed commit-id命令:回退到指定版本.(mixed:混合的,即:中等回退.) 该命令不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回退到了指定版本. 但是 ...

  8. JUC源码学习笔记1——AQS和ReentrantLock

    笔记主要参考<Java并发编程的艺术>并且基于JDK1.8的源码进行的刨析,此篇只分析独占模式,后续在ReentrantReadWriteLock和 CountDownLatch中 会重点 ...

  9. SpringMVC-02

    一.SSM整合[重点] 1 SSM整合配置 问题导入 请描述"SSM整合流程"中各个配置类的作用? 1.1 SSM整合流程 创建工程 SSM整合 Spring SpringConf ...

  10. from Crypto.Cipher import AES报错

    python 在 Windows下使用AES时要安装的是pycryptodome 模块   pip install pycryptodome python 在 Linux下使用AES时要安装的是pyc ...