连接池(c3p0)

一、连接池的介绍

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。这项技术能明显提高对数据库操作的性能。

连接池的好处:
(1)对于大多数应用程序,当它们正在处理事务时,仅需要能够访问JDBC连接的 1 个线程。当不处理事务时,这个连接就会闲置(造成资源的浪费)。相反,连接池允许闲置的连接被其它需要的线程使用。
(2)当一个线程需要用 JDBC 对一个 数据库操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将它返回到连接池中(连接池会自动收回连接,当然我们也可以在用完以后释放),这样这就可以被其它想使用它的线程使用,这样不会照成内存的浪费。
(3)当连接被从池中调用出来,那么这个连接将被这个线程专有地使用。

连接池主要的优点有:
① 减少连接创建时间及资源的使用 :因为连接是循环使用的,所以就少了创建连接所需要的时间,更重要的是不会在线程每一次调用JDBC的时候都去创建一个新的连接,造成资源浪费。
②简化的编程模式:当使用连接池时,每一个单独的线程在使用其中的连接时,就能够像创建了一个自己的 JDBC 连接一样操作,允许用户直接使用JDBC编程技术。

二、c3p0与dbcp的比较

C3P0:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
dbcp:DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。

dbcp没有自动回收空闲连接的功能; c3p0有自动回收空闲连接功能
两者主要是对数据连接的处理不同c3p0提供最大空闲时间,dbcp提供最大连接数。前者是如果连接时间超过最大连接时间,就会断开当前连接。dbcp如果超过最大连接数,就会断开所有连接。


三、c3p0的使用

1. 同样,除了我们要导入数据库驱动的ajr,我们还需要导入连接池jar:c3p0-0.9.1.2.jar
我们maven直接引入依赖:

<!--连接池-->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

2. 使用连接池,创建连接。连接池有两种方式:
a) 硬编码方式
b) 配置方式(xml)

硬编码方式就是讲数据库连接信息写在Java代码中,而xml是将这些信息写在.xml文件中,实现分离,便于操作。
我们这里给大家展示xml配置方式的代码:

同样我们需要查询new库下面user这张表:
在这里插入图片描述

Java代码:

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class C3p0LG1208 {
    public static void main(String[] args) {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();

        try {
            Connection conn = dataSource.getConnection();
            Statement statement = conn.createStatement();
            ResultSet resultSet = statement.executeQuery("select * from user");
            while (resultSet.next()) {
                System.out.println(resultSet.getString("name")+":"+resultSet.getString("pwd"));

            }

            resultSet.close();
            statement.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!--配置连接池mysql-->
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/new?useSSL=true</property>
        <property name="user">root</property>
        <property name="password">123</property>

        <!-- 初始化连接数 -->
        <property name="initialPoolSize">3</property>
        <!--最大空闲时间,多少秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <property name="maxIdleTime">1</property>
        <!--连接池中保留的最大连接数。Default: 15 -->
        <property name="maxPoolSize">6</property>
        <!-- 最小连接数 -->
        <property name="minPoolSize">1</property>
    </default-config>

</c3p0-config>

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值