C3P0基本使用中遇到的bug及操作

本文记录了在使用C3P0数据库连接池时遇到的配置与驱动兼容性问题,包括maxPoolSize、checkoutTimeout设置无效,URL参数调整及驱动包版本冲突的详细解决过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在跟着教程练习c3p0基本使用的过程中遇到如下问题:

代码:

package cn.itcast.datasource.c3p0;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class c3p0demo {
    public static void main(String[] args) throws SQLException {
        //创建数据库连接池对象
        DataSource ds=new ComboPooledDataSource();
        //获取连接对象(不再使用DriverManager)
        Connection conn = ds.getConnection();
        //打印获取到的连接对象
        System.out.println(conn);
        conn.close();
    }
}

错误信息: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@1483de4 – timeout at awaitAvailable()

解决过程:
百度搜索后解决方法如下:
1.加大maxPoolSize
2.加大checkoutTimeout
3.在url后加 ?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
但是三种并没有用

后询问同学A,方法是在url后加 &serverTimezone=GMT%2B8
但是我更改后依然连接超时

后询问同学B,她让我更换了数据库驱动jar包,mysql-connector-java-5.1.48,之前在druid练习中我把数据库驱动jar包更换为了mysql-connector-java-8.0.16.jar。结果在C3P0中反而不匹配。
低版本换高版本时,要将配置文件中的类名com.mysql*.cj*.jdbc.Driver的.cj删除

在更换了驱动包之后,依然超时,后来经提醒发现并没有将之前的驱动包删除干净。
解决方法:在Project Structure的Libraries中将有红色波浪线的删除,并且Apply!

问题: 为何Druid和C3P0需要的驱动jar包版本不同;且在没有删干净的情况下Druid并没有报错。

再次运行即成功!
成功截图(似乎仍有错误)

用到的快捷键:
注释:ctrl+/

日期:2020.2.1 19:00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值