C3p0连接数据库报错 都想炸了还是没解决

问题遇到的现象和发生背景

无法适应C3P0

问题相关代码,请勿粘贴截图

img

img

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

配置文件


<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>

        <!-- 数据库地址 -->
        <property name="jdbcUrl">jdbc:mysql://你的ip如本地localhost:3306/whd?useSSL=false&amp;serverTimezone=CTT&amp;useUnicode=true&amp;characterEncoding=utf8
        </property>
        <!-- 数据库驱动   5.7版本前驱动是com.mysql.jdbc.Driver -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <!-- 用户名 -->
        <property name="user">root</property>
        <!-- 密码  你自己的密码-->
        <property name="password">123456</property>

        <!-- 连接池初始化时创建的连接数 -->
        <property name="initialPoolSize">10</property>
        <!-- 连接池中的最小连接数 -->
        <property name="minPoolSize">3</property>
        <!-- 连接池中的最大连接数 -->
        <property name="maxPoolSize">100</property>
        <!-- 无空闲连接可用时,可一次性创建新连接的数量 -->
        <property name="acquireIncrement">10</property>
        <!-- 获取数据库连接失败后重复尝试的次数 -->
        <property name="acquireRetryAttempts">1</property>
        <!-- 两次连接的间隔时间,单位为毫秒 -->
        <property name="acquireRetryDelay">1000</property>
    </default-config>
</c3p0-config>      
        

Jdbc工具类

import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;

public class JDBCUtils {
    private static DataSource ds = new ComboPooledDataSource();

    public static DataSource getDataSource() {
        return ds;
    }

    public static Connection getConnection() {
        Connection conn = null;

        try {
            conn = ds.getConnection();
        } catch (SQLException var2) {
            var2.printStackTrace();
        }

        return conn;
    }

    public static void close(PreparedStatement pst, Connection conn, ResultSet rst) {
        if (rst != null) {
            try {
                rst.close();
            } catch (SQLException var6) {
                var6.printStackTrace();
            }
        }

        if (pst != null) {
            try {
                pst.close();
            } catch (SQLException var5) {
                var5.printStackTrace();
            }
        }

        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException var4) {
                var4.printStackTrace();
            }
        }

    }
}

测试一下

package test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.junit.Test;

import com.web.tom.Utils.JDBCUtils;
import com.web.tom.entity.Admin;

public class TestJdbc {
    private Connection conn;
    private PreparedStatement pst;
    private ResultSet rst;
    private String sql;


    @Test
    public  void getAllAdmin() {
        ArrayList<Admin> list = new ArrayList<Admin>();
        this.conn = JDBCUtils.getConnection();
        this.sql = "select id,username,password from admin";

        try {
            this.pst = this.conn.prepareStatement(this.sql);
            this.rst = this.pst.executeQuery();

            while (this.rst.next()) {
                Admin admin = new Admin();
                admin.setId(this.rst.getInt("id"));
                admin.setUsername(this.rst.getString("username"));
                admin.setPassword(this.rst.getString("password"));
                list.add(admin);
            }

            JDBCUtils.close(this.pst, this.conn, this.rst);
        } catch (SQLException var3) {
            var3.printStackTrace();
        }finally {
            
            JDBCUtils.close(pst, conn, rst);
        }
        System.out.println(list);
        
    }

}


得到结果

img

可能原因:
1、驱动Jar包版本与注册驱动的类不匹配。
2、项目是否引入驱动包。
解决方法:
一.驱动包与注册驱动类的匹配关系,一般是5版本与8版本
5版本的驱动包:注册驱动类为 com.mysql.jdbc.Driver。
8版本的驱动包:注册驱动类为 com.mysql.cj.jdbc.Driver。

二时区问题: 如果你是8版本的驱动包,连接数据库时需要配置一个时区,在路径url后面加上?serverTimezone=GMT

img