赞
踩
数据库连接池是一种管理数据库连接的技术,它可以在应用程序启动时创建一定数量的数据库连接,并将这些连接保存在一个连接池中。当应用程序需要访问数据库时,可以从连接池中获取一个空闲的连接,使用完毕后再归还给连接池。这样可以提高应用程序访问数据库的效率,减少数据库连接的开销。
Java中的数据库连接池主要有以下几个特点:
- 重用性:通过连接池复用已有的数据库连接,避免了频繁地打开和关闭数据库连接,提高了系统性能。
- 高效性:连接池可以预先创建和管理一定数量的数据库连接,减少了等待建立连接的时间。
- 安全性:连接池可以限制系统中同时存在的数据库连接数量,防止因为过多的连接导致系统资源耗尽。
- 管理性:连接池可以对数据库连接进行监控和管理,如空闲超时、异常处理等。
常见的连接池有C3P0、Druid、HikariCP 、DBCP
1、 JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由第三方来实现。
2、 C3P0数据库连接池,速度相对较慢(只是慢一丢丢),但是稳定性很好,Hibernate,Spring底层用的就是C3P0。
3、 DBCP数据库连接池,速度比C3P0快,但是稳定性差。
4、 Proxool数据库连接池,有监控连接池状态的功能,但稳定性仍然比C3P0差一些。
5、 BoneCP数据库连接池,速度较快。
6、 Druid数据库连接池(德鲁伊连接池),由阿里提供,集DBCP,Proxool,C3P0连接池的优点于一身,是日常项目开发中使用频率最高的数据库连接池。
7、HikariCP:HikariCP是一个轻量级、高效的JDBC连接池,具有快速启动和低延迟的特点。HikariCP的设计目标是提供极佳的性能和可靠性,同时尽量减少资源消耗和开销。HikariCP支持各种JDBC驱动程序和数据源。相比于其他连接池,HikariCP配置简单,易于使用。
使用连接池的步骤如下:
使用数据库连接池的步骤如下:
- 引入相关jar包。需要导入的包包括JAVA通过jdbc访问mysql数据库所需的包,如mysql-connector-java-5.1.37-bin.jar;使用数据库连接池技术必需的包,如commons-pool.jar;以及使用dbcp连接池时所需的包,如commons-dbcp-1.2.2。配置数据源。这一步包括设置数据库URL、用户名和密码等相关信息。
- 从数据源中获取连接。在应用程序需要访问数据库时,可以通过调用数据源的getConnection()方法来获取数据库连接。
- 使用连接执行SQL操作。可以使用获取到的数据库连接来执行SQL查询或更新操作。
- 释放连接。完成SQL操作后,需要调用Connection对象的close()方法来释放数据库连接,将其返回到连接池中以供后续使用。
定义:
C3P0是一个开源的JDBC数据库连接池库,它提供了高度灵活和高性能的连接池实现。它可以与各种关系型数据库一起使用,包括MySQL、Oracle、SQL Server等。实际上,“C3P0"的名称代表"Connect3 Pool”,意味着它可以管理多个数据库连接。
1.1、导入jar包
jar包下载地址:https://sourceforge.net/projects/c3p0/
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
1.2、配置xml文件
1.3 c3p0-config.xml模板
<c3p0-config> <!--使用默认的配置读取数据库连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcworks1214?useServerPrepStmts=true</property> <property name="user">root</property> <property name="password">20040417</property> <!-- 连接池参数 --> <!--初始化申请的连接数量--> <property name="initialPoolSize">5</property> <!--最大的连接数量--> <property name="maxPoolSize">10</property> <!--超时时间--> <property name="checkoutTimeout">3000</property> </default-config> <!-- <named-config name="otherc3p0">--> <!-- <!– 连接参数 –>--> <!-- <property name="driverClass">com.mysql.jdbc.Driver</property>--> <!-- <property name="jdbcUrl">jdbc:mysql://localhost:3306/hs_test?serverTimezone=Asia/Shanghai</property>--> <!-- <property name="user">root</property>--> <!-- <property name="password">root</property>--> <!-- <!– 连接池参数 –>--> <!-- <property name="initialPoolSize">5</property>--> <!-- <property name="maxPoolSize">8</property>--> <!-- <property name="checkoutTimeout">1000</property>--> <!-- </named-config>--> </c3p0-config>
测试代码:
注 文件会自动读取 C3P0的配置文件 c3p0-config.xml
package javajdbc连接池; import com.mchange.v2.c3p0.ComboPooledDataSource; import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; public class Dome { public static void main(String[] args)throws PropertyVetoException, SQLException { Dome d=new Dome(); d.test(); } public void test() throws PropertyVetoException, SQLException { //c3p0的数据源 ComboPooledDataSource dataSource=new ComboPooledDataSource(); //连接数据库参数 dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1/数据库名"); dataSource.setUser("root"); //用户名 dataSource.setPassword("20040417"); //用户密码 //连接池参数设置 dataSource.setInitialPoolSize(5); dataSource.setMaxPoolSize(20);//最大连接数 dataSource.setCheckoutTimeout(3000);//连接超时 Connection con=dataSource.getConnection(); System.out.println("c3p0连接成功"); //查询数据库 ResultSet rs=con.prepareStatement("select count(*) from grade").executeQuery(); while (rs.next()){ int count=rs.getInt(1); System.out.println(count); } con.close(); } }
控制台效果:
定义:
Druid是阿里巴巴开源的一个功能强大且高性能的JDBC数据库连接池,它提供了丰富的功能和配置选项。Druid连接池是为监控而生,内置了强大的监控功能,这些监控特性并不会对性能产生影响。
2.1、导入jar包
Druid(德鲁伊) jar包下载地址(本人用1.2.0版本):https://repo1.maven.org/maven2/com/alibaba/druid/1.2.0/
2.2、添加配置文件 文件名自定义
src下的配置文件信息:
url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver
initialSize=10
maxActive=20
maxWait=1000
filters=wall
测试代码:
package 德鲁伊连接池; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import org.junit.Test; import javax.sql.DataSource; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.util.Properties; public class Druid { @Test // 创建一个Properties对象,用于加载src/jdbc.properties文件 public void show() throws Exception { Properties properties = new Properties(); // 从文件中加载属性 properties.load(new FileInputStream("src/jdbc.properties")); // 使用DruidDataSourceFactory创建一个数据源 DataSource ds= DruidDataSourceFactory.createDataSource(properties); // 获取一个连接 Connection con=ds.getConnection(); // 执行一个查询,查询user表中的记录数 ResultSet rs=con.prepareStatement(" select count(*)from user ").executeQuery(); // 遍历查询结果 while (rs.next()){ int str=rs.getInt(1); System.out.println(str+"人"); } // 关闭连接 con.close(); } } //输出结果 为 5人
HikariCP连接池定义:
HikariCP是由日本程序员开源的一个数据库连接池组件, Hikari连接池号称“史上最快连接池,代码非常轻量,并且速度非常的快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。在SpringBoot2.0中,官方也是推荐使用HikariCP
3.1、导入jar包:
HikariCP包 jar包下载地址:https://mvnrepository.com/artifact/com.zaxxer/HikariCP/4.0.3
jar包复制到项目中并添加到库:
3.2、添加配置文件
# 数据库连接URL jdbcUrl=jdbc:mysql://localhost:3306/mydatabase # 数据库用户名 username=myusername # 数据库密码 password=mypassword # 连接池名称 poolName=MyConnectionPool # 连接池大小 maximumPoolSize=10 # 最小空闲连接数 minimumIdle=5 # 连接超时时间(毫秒) connectionTimeout=30000 # 空闲连接超时时间(毫秒) idleTimeout=600000 # 最大生存时间(毫秒) maxLifetime=1800000
测试代码:
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class HikariCPDemo { private static final String DB_URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "123456"; public static void main(String[] args) { HikariConfig config = new HikariConfig(); config.setJdbcUrl(DB_URL); config.setUsername(DB_USER); config.setPassword(DB_PASSWORD); config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); HikariDataSource dataSource = new HikariDataSource(config); try (Connection connection = dataSource.getConnection()) { Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM users"); while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } } catch (SQLException e) { e.printStackTrace(); } finally { dataSource.close(); } } } //输出结果为 ID:1,Name:张三
DBCP链接池定义:
全称Database Connection Pool,是Apache下的一个Java连接池项目,也是DBCP,全称Database Connection Pool,是Apache下的一个Java连接池项目,也是Tomcat使用的连接池组件。数据库连接是一个耗时且耗资源的行为,通过使用DBCP连接池,可以预先建立与数据库的连接,从而减少打开和关闭连接的时间和资源消耗。
4.1、引入jar包:
官网俩个jar包下载网址:
Pool – Download Apache Commons Pool
DBCP – Download Apache Commons DBCP
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/eea52c223f9e42ca9b4c2489c6f25c9f.jpeg#pic_center)4.2、DBCP配置文件代码如下:
url=jdbc:mysql://localhost:3306/database
driverClassName=com.mysql.cj.jdbc.Driver
username=root
password=root
initialSize=10
maxActive=30
maxWait=3000
测试代码演示:
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.commons.dbcp2.BasicDataSource; public class DBCPDemo { private static final String DB_URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "123456"; public static void main(String[] args) { // 创建数据源对象 BasicDataSource dataSource = new BasicDataSource(); dataSource.setUrl(DB_URL); dataSource.setUsername(DB_USER); dataSource.setPassword(DB_PASSWORD); // 设置连接池参数 dataSource.setInitialSize(5); // 初始连接数 dataSource.setMaxTotal(10); // 最大连接数 dataSource.setMinIdle(2); // 最小空闲连接数 dataSource.setMaxIdle(5); // 最大空闲连接数 dataSource.setMaxWaitMillis(10000); // 获取连接等待时间 try (Connection connection = dataSource.getConnection()) { // 创建语句对象 Statement statement = connection.createStatement(); // 执行查询操作 ResultSet resultSet = statement.executeQuery("SELECT * FROM users"); // 处理查询结果 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭数据源 dataSource.close(); } } } //输出结果为 ID:1,Name:张三
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。