Java 项目启动连接 MySQL 数据库报错,报错信息如下:

1
2
3
4
5
6
7
8
9
10
11
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
### The error may exist in phase01/UserMapper.xml
### The error may involve test.findUserById
### The error occurred while executing a query
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
... 55 more

开发环境

  • JDK1.8
  • MySQL 8.0.20

maven 使用的 mysql 依赖

1
2
3
4
5
6
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>

配置文件 mysql 相关配置信息

1
2
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8

解决办法

尝试此异常的原因是:从 JDBC6.0 开始要使用新的驱动类,并且 url 中必须要设置时区,否侧会报错。应该使用新的驱动类是 com.mysql.cj.jdbc.Driver,而不是 com.mysql.jdbc.Driver,并设置时区。
使用新的 mysql 驱动 jar 包,将依赖替换为更高版本,例如 8.0.15

1
2
3
4
5
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>

修改驱动的类名,并且在 url 后面加上时区设置,UTC表示标准时区。

1
2
db.driver=com.mysql.jc.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC