问题描述

在运用JDBC连接数据库时,用的是C3P0数据源,出现Connections could not be acquired from the underlying database!这个异常

话不多说,先上代码

public class C3P0Test {
    @Test
    //测试JDBC模板
    public void test1() throws PropertyVetoException {
        //设置数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3308/db01");
        dataSource.setUser("root");
        dataSource.setPassword("lyj20010327");
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        //设置数据源   知道数据源在哪
        jdbcTemplate.setDataSource(dataSource);
        //执行操作
        int data = jdbcTemplate.update("insert into dept value(?,?,?)","10000","Asdnasc","db01");
        System.out.println(data);
    }

}

原因分析:

很多原因都会使连接数据库出错,我列出以下几个可能出现的原因

  1. 驱动Jar包版本与注册驱动的类不匹配。
  2. 数据库连接地址有误。
  3. 数据库账户密码是否输入正确。
  4. 数据库,表,字段是否对应。
  5. 项目是否引入驱动包。

解决方案:

对应的解决方案:

一.驱动包与注册驱动类的匹配关系,一般是5版本与8版本

  1. 5版本的驱动包:注册驱动类为 com.mysql.jdbc.Driver。
  2. 8版本的驱动包:注册驱动类为 com.mysql.cj.jdbc.Driver。

二.时区配置问题,一般存在于8版本的驱动包

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

问题完美解决!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐