c3p0只有配置的初始10,可是只有3个连接

c3p0只有配置的初始10,可是只有3个连接

问题描述:

c3p0只有配置的初始10,可是只有3个连接

相关截图:

https://img1.sycdn.imooc.com//climg/650c8ffa09e6640f17980464.jpg

相关代码:

相关代码:<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/example?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;allowPublicKeyRetrieval=true</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <!-- 连接池初始连接数量 -->
        <property name="initialPoolSize">10</property>
        <!--最大连接数量-->
        <property name="maxPoolSize">20</property>
    </default-config>
</c3p0-config>


package com.doc.jdbc;


import com.doc.jdbc.common.DbUtils;
import com.doc.jdbc.entity.Employee;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * C3P0 连接池配置与使用
 */
public class C3P0Sample {
    public static void main(String[] args) {
        // 第一步、加载属性文件
        // 第二步:获取 DataSource 数据源对象(数据库在JDBC中的别称)。
        DataSource dataSource = new ComboPooledDataSource();

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        // 第三步:创建数据库连接
        try {
            conn = dataSource.getConnection();
            String sql = "select * from employee limit 0,10";
            pstmt = conn.prepareCall(sql);
            rs = pstmt.executeQuery();
            List<Employee> list = new ArrayList();
            // 4、遍历查询结果
            while (rs.next()) {
                int eno = rs.getInt(1); // 获取第1列数据,以整形返回
                String ename = rs.getString("ename");
                float salary = rs.getFloat("salary");
                String dname = rs.getString("dname");
                // java.sql.Date
                Date hiredate = rs.getDate("hiredate");
                System.out.println(dname + "-" + eno + "-" + ename + "-" + salary + "-" + hiredate);
                Employee emp = new Employee();
                emp.setEno(eno);
                emp.setEname(ename);
                emp.setSalary(salary);
                emp.setDname(dname);
                emp.setHiredate(hiredate);
                list.add(emp);
            }
            System.out.println(list.size());
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DbUtils.closeConnection(rs, pstmt, conn);
        }

    }
}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,可能因为某些语句执行完,已经释放连接了,所以没有十个数据库连接。老师在源码中测试,以debug形式启动后,在数据库中查看会有10个连接。建议同学重构项目,然后打一个断点使用debug模式启动试一下。如下所示:

https://img1.sycdn.imooc.com//climg/61f3bf3309f4ee3803150147.jpg

https://img1.sycdn.imooc.com//climg/61f4a5ea0985bff611110699.jpg

祝学习愉快!

  • 慕UI8284076 提问者 #1

    我刚才重新build项目,并且在debug下运行,仍然是3个连接。经过测试initialPoolSize这个参数没生效,maxPoolSize这个参数是生效的。jar包我是从慕课网的《训练素材》里获取的,没有从官网下载。

    2023-09-22 15:41:35
  • 慕UI8284076 提问者 #2

    c3p0有这个问题,druid就没问题。

    2023-09-22 15:43:02
  • 慕UI8284076 提问者 #3

    是我断电打的和你的不一样,确实是10个连接。

    该问题已解决,非常感谢。

    2023-09-22 15:45:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师