JDBC连接池C3P0,druid

数据库连接池

什么是数据库连接池:

  • 将多个连接对象放在一个类似于list的集合中,做到需要用到连接的时候就去池子中获取Connection连接对象,不用就放回池子中,不用频繁的获取连接池,关闭连接池.而是用时去池子中拿,不用就还回去

连接池的作用:

  • 避免重复创建链接, 提升程序的执行效率

C3P0连接池

  1. 导包

    c3p0-0.9.5.2.jar
    mchange-commons-java-0.2.12.jar
    https://mvnrepository.com,可以在maven网站去下载

  2. 配置C3P0配置信息

在这里插入图片描述
注意:配置文件名称一定要是:c3p0-config.xml,并且在src目录下

<c3p0-config>
  <!-- 使用默认的配置读取连接池对象 -->
  <default-config>
  	<!--  连接参数 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://192.168.93.132:3306/jdbc</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    <!-- 连接池参数 -->
    <!--初始化的连接数量-->
    <property name="initialPoolSize">5</property>
    <!--最大连接数量-->
    <property name="maxPoolSize">10</property>
    <!--超时时间-->
    <property name="checkoutTimeout">3000</property>
  </default-config>
</c3p0-config>
--注意-- 
	配置信息中的ip地址端口号,用户名,密码要和你mysql安装服务器的ip和用户名密码匹配
  1. 编写代码测试连接池以及连接数量
public class C3P0Test {
    public static void main(String[] args) throws Exception{
        //1.创建c3p0的数据库连接池对象
        DataSource dataSource = new ComboPooledDataSource();

        //2.循环11次,从连接池中获取11次连接对象,看看是否有重复的,有,就说明是从池子中获取的连接对象
        for(int i = 1; i <= 11; i++) {
            Connection con = dataSource.getConnection();
            System.out.println(i + ":" + con);
            //当循环第5次的时候,把5次的这个连接对象还回连接池
            if(i == 5) {
                con.close();
            }
        }
    }
}

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

总结

由上面的代码案列得知,当循环到第5次获取连接对象的时候,就把链接对象还回给链接池了,后面链接就会拿到上一次还回去的对象,因为我们前面配置文件配置的是最大连接数量10,我们测试循环拿11次,如果不还回去就会报如下错误:因为最大连接数量是10,第11个获取 连接对象的时候发现池子里没有连接对象,就会等待我们上面配置文件中设置的多少时间.
在这里插入图片描述

关于C3P0就先了解到这里

druid连接池:

  1. 导包

    去maven网站搜索druid下载复制在lib目录下导入即可

  2. 配置druid的配置文件(是properties配置文件)

    在src目录下,名字随便取:我这里叫:druid.properties
    在这里插入图片描述

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.93.132:3306/jdbc
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数量
maxActive=10
# 超时时间
maxWait=3000
--注意-- 
	配置信息中的ip地址端口号,用户名,密码要和你mysql安装服务器的ip和用户名密码匹配

3.编写代码测试:

我这里druid测试的话是执行一条查询语句,你也可以向上面一样测试下连接对象,获取超过了最大连接次数,然后看看有没有重复的对象

public class DruidTest {
    public static void main(String[] args) throws Exception{
        //1.通过连接池工具类获取一个数据库连接
        Connection con = DataSourceUtils.getConnection();

        //通过连接对象获取预编译语句对象
        String sql = "SELECT * FROM student";
        PreparedStatement pst = con.prepareStatement(sql);

        //2.执行sql语句,接收结果集
        ResultSet rs = pst.executeQuery();

        //3.处理结果集
        while(rs.next()) {
            System.out.println(rs.getInt("sid") + "\t" + rs.getString("name") + "\t" + rs.getInt("age") + "\t" + rs.getDate("birthday"));
        }

        //4.释放资源
        DataSourceUtils.close(con,pst,rs);
    }
}

** 执行结果**
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值