在跟着教程练习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