news 2026/4/21 2:44:24

连接池学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
连接池学习

一、为什么需要连接池?

在传统的JDBC开发中,每次操作数据库都需要:

1.加载驱动 2.创建连接 3.执行SQL 4.关闭连接

缺点:需要自己创建连接和销毁连接,这样是比较消耗时间,资源等

有一些连接池,已经创建好了一些连接,现在可以从连接池中获取到,这样就节省创建连接时间,直接使用这些连接,归还到连接池中。

优点:

节省创建连接与释放连接,性能消耗

连接池中连接起到复用的作用,提升程序性能

二、连接池参数(池参数,如果不指定,有默认值)

初始大小:10个

最小空闲连接数:3个

增量:一次创建的最小单位(5个)

最大空闲连接数:12个

最大连接数:20个

最大的等待时间:1000毫秒

三、4个参数

任何的开源的连接池,4大参数都需要自己来设置

* 驱动的名称‐‐ com.mysql.jdbc.Driver

* 连接‐‐ jdbc:mysql:///day14

* 用户名‐‐ root

* 密码‐‐ root

四、DataSource 接口

SUN 公司定义了javax.sql.DataSource接口,所有连接池都必须实现它:

public interface DataSource { Connection getConnection() throws SQLException; }

开源连接池(DBCP、C3P0、Druid)都实现了该接口

通过getConnection()获取连接

调用close()方法时,底层被增强为归还连接而非销毁

五、主流连接池对比

连接池特点
DBCPApache 提供,轻量级
C3P0支持自动回收空闲连接
Druid阿里出品,功能最强,支持监控、SQL日志、加密

六、Druid 连接池实战

1. 导入依赖

<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>

2.编写测试程序

import com.alibaba.druid.pool.DruidDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; /** * 测试连接池对象 */ public class JdbcTest6 { public static void main(String[] args) { // 创建连接池对象,从连接池中获取到连接对象 DruidDataSource dataSource = new DruidDataSource(); // 设置4个参数 驱动类 地址 用户名 密码 dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///jdbcdemo"); dataSource.setUsername("root"); dataSource.setPassword("root"); // 设置初始化连接个数,默认是0 dataSource.setInitialSize(5); // 设置最大连接数 dataSource.setMaxActive(10); // 最大等待时间,单位是毫秒 2秒 dataSource.setMaxWait(2000); // 定义链接对象 Connection conn = null; PreparedStatement stmt = null; try { // 获取到连接对象 conn = dataSource.getConnection(); // 编写SQL语句 String sql = "insert into t_user values (null,?,?,?)"; // 预编译SQL语句 stmt = conn.prepareStatement(sql); // 设置值 stmt.setString(1,"eee"); stmt.setString(2,"eee"); stmt.setString(3,"eee"); // 执行sql stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally { // 释放资源 if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { // 把conn关闭了,其实连接池的底层已经对close方法进行增强。原来是销毁连接,现在是归还连接。 conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }

3. 配置文件方式

druid.properties

driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///jdbcdemo username=root password=root initialSize=5 maxActive=10 maxWait=3000 maxIdle=6 minIdle=3

4.编写工具类

import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * JDBC的工具类 1.0版本 * JDBC的工具类 2.0版本(智能一些),编写properties属性文件,程序就可以读取属性文件 * JDBC的工具类 3.0版本,加入连接池对象 */ public class JdbcUtils2 { // 连接池对象 private static DataSource DATA_SOURCE; static{ // 加载属性文件 Properties pro = new Properties(); InputStream inputStream = JdbcUtils2.class.getResourceAsStream("/druid.properties"); try { // 加载属性文件 pro.load(inputStream); // 创建连接池对象 DATA_SOURCE = DruidDataSourceFactory.createDataSource(pro); } catch (Exception e) { e.printStackTrace(); } } /** * 从连接池中获取连接,返回。 * @return */ public static Connection getConnection(){ Connection conn = null; try { conn = DATA_SOURCE.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 关闭资源 * @param conn * @param stmt * @param rs */ public static void close(Connection conn, Statement stmt, ResultSet rs){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 关闭资源 * @param conn * @param stmt */ public static void close(Connection conn, Statement stmt){ if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 2:44:22

ARM架构AFGDTU_ELx寄存器详解与应用

1. ARM架构中的AFGDTU_ELx寄存器概述在ARMv8/v9架构中&#xff0c;系统寄存器扮演着处理器控制和状态管理的核心角色。AFGDTU_ELx&#xff08;Auxiliary Fine Grained Dynamic Traps, Unprivileged&#xff09;系列寄存器是近年来引入的重要功能组件&#xff0c;主要用于细粒度…

作者头像 李华
网站建设 2026/4/21 2:41:13

期货交易系统部署三 — 交易

期货交易系统核心服务部署方案&#xff0c;覆盖期货交易、交易风控、日志监控全套流程&#xff0c;适配国内期货&#xff08;CTP&#xff09;国际期货&#xff08;GPS、直达&#xff09;。交易服务功能CTP 交易前置连接限价单、市价单、撤单账户、持仓、委托、成交查询风控&…

作者头像 李华
网站建设 2026/4/21 2:40:01

AI漫剧软件2026推荐,多风格漫剧快速生成

AI漫剧软件2026推荐&#xff0c;多风格漫剧快速生成在当今内容创作行业&#xff0c;AI漫剧的发展势头迅猛。据《2026 年中国AI内容创作行业发展报告》显示&#xff0c;2026 年AI漫剧市场规模同比增长了 60%&#xff0c;但能够真正实现高效、多风格漫剧生成的软件却并不多。很多…

作者头像 李华
网站建设 2026/4/21 2:39:33

我用的是edge浏览器打开pdf中的公式的出现了乱码,应该是浏览器的问题——浏览器读取pdf文件可能存在乱码,这个应该是浏览器的bug,如何解决?

我用的是edge浏览器打开pdf中的公式的出现了乱码,应该是浏览器的问题——浏览器读取pdf文件可能存在乱码,这个应该是浏览器的bug,如何解决? 下面是edge浏览器打开显示的结果: 下面是采用pdf阅读器的结果,公式显示正常。wps也是正常。 下面为ai生成,不一定正确: 在Edge浏…

作者头像 李华
网站建设 2026/4/21 2:35:48

军用级水下动力系统标准方案(ROV/AUV/无人潜航器)

军用级水下动力系统标准方案&#xff08;ROV/AUV/无人潜航器&#xff09;军用级水下动力系统广泛应用于无人潜航器&#xff08;AUV&#xff09;、遥控水下机器人&#xff08;ROV&#xff09;、水下无人战术平台等领域&#xff0c;要求在深海高压、低温、强腐蚀、电磁复杂环境下…

作者头像 李华