摘要:在本文中,总结了开发过程中最为常见的几种 MySQL 抛出的异常以及如何解决,包括高版本驱动的问题、时区配置问题、SSL 连接问题等,是一篇经验总结贴。

前言

在本文中,总结了开发过程中最为常见的几种 MySQL 抛出的异常以及如何解决,包括高版本驱动的问题、时区配置问题、SSL 连接问题等,是一篇经验总结贴,于我个人而言,这一篇足以解决目前项目中所有遇到的 MySQL 问题。同时,也希望本文能对 MySQL 数据库初学者有一定的引导入门作用。

报错如下:

Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!  

对于此类错误,直接看释义,一句话:JDBC 驱动抛出异常,连不上数据库。

一、代码配置的数据库名称或者密码与本地数据库不一致

1.1、错误产生描述

第一种,也是最为常见的一种错误:代码配置的数据库名称或者密码与本地数据库不一致,抛出异常。

如上图所示,在配置文件中,前面的 name 属性是默认的,无需改变,对于用户名,一般为 root,可以通过数据库管理软件直接查看本地配置的情况,数据库的密码就是你自己设置的了。

1.2、解决方式

修改配置文件对应的名称和密码。

二、导入的非本地项目文件与本地的数据库版本不匹配

2.1、错误产生描述

第二种常见的错误:使用 IDE(以 Eclipse 为例)导入的非本地项目文件与本地的数据库版本不匹配。

举个例子:你导入你 eclipse 中的项目里面依赖的 jar 包是 8.0 的版本,而你本地安装的是 5.0 的 MySQL 数据库,自然报错。

2.2、解决方式

在你导入的项目中找到 Referenced Libraries,右击鼠标→Build Path→Configure Build Path…Remove 掉项目里面依赖的 8.0 的 MySQL 驱动,Add 进你本地安装的 5.0 的版本即可。

三、MySQL 高版本配置加载驱动类包出错问题(以 MySQL 8.0 为例)

这个错误是由于 MySQL 版本更新之后,驱动包发生改变导致的,新的驱动程序类是 com.mysql.cj.jdbc.Driver。

3.1、错误产生描述

报错如下:

Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

错误说明:不建议使用驱动类’com.mysql.jdbc.Driver’。新的驱动程序类是’com.mysql.cj.jdbc.Driver’,驱动程序是通过 SPI 自动注册的,通常是不需要手动加载驱动类。

3.2、解决方式

将 MySQL 数据库 5.0 使用的驱动类com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver,驱动程序是通过 SPI 自动注册的,通常是不需要手动加载驱动类。修改之后的配置文件如下图所示:

<!-- 加载数据库驱动 -->
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>

3.3、MySQL 不同版本的驱动类如何查看

对于 MySQL 的驱动类,我们对每个版本进行查看时,点开驱动的 jar 包可以直接查看驱动是位于哪里,例如 8.0 版本的就是 com.mysql.cj.jdbc.Driver,如下图所示:

四、数据库连接字符串高版本配置出错(时区问题)

注意:MySQL 6.0 版本之后都需要配置时区。

4.1、错误产生描述

报错如下:

2020-01-14 00:45:30,876 ERROR [DruidDataSource.java:616] : init datasource error java.sql.SQLException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

错误说明:服务器时区值“????±××?±?无法识别或代表一个以上的时区。

4.2、解决方式

我们可以利用时区支持,通过配置服务器或 JDBC 驱动程序(通过 serverTimezone 配置属性)以使用更具体的时区值。

配置文件如下:

<!-- 数据库连接字符串 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8&amp;characterEncoding=utf-8"></property>

五、为什么数据库中写入数据相差 8 个小时?

5.1、错误产生描述

Java 数据库连接使用 UTC 时区(世界标准时间),即 serverTimezone=UTC,而北京时间比 UTC 时间早8小时,即 UTC+08:00,如果我们直接使用 serverTimezone=UTC,写入数据库中的数据会提前 8 个小时。如果按照如下配置就会在数据库中写入数据相差 8 个小时:

<!-- 数据库连接字符串 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&amp;characterEncoding=utf-8"></property>

5.2、解决方式

我们可以修改设置 serverTimezone 为北京时间 GMT%2B8、上海时间 Asia/Shanghai 或者香港时间 Hongkong。

配置文件如下即可:

<!-- 数据库连接字符串 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8&amp;characterEncoding=utf-8"></property>

另外在 MySQL 中的 my.ini 配置文件也可以修改,此文章仅用于解决相应问题,故不多做详细描述。

六、SSL 连接问题

6.1、错误产生描述

报错如下:

Sun Oct 14 00:45:30 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

错误说明:不建议在没有服务器身份验证的情况下建立 SSL 连接。根据 MySQL 5.5.45+,5.6.26+ 和 5.7.6+ 的 SSL 连接要求,如果未设置连接方式,则默认情况下必须建立 SSL 连接。对于不使用 SSL 的现有应用程序,服务器的验证证书属性设置为“false”。您需要通过设置useSSL = false来显式禁用 SSL,或者设置useSSL = true并提供服务器的验证证书。

6.2、解决方式

  1. 数据库 URL 连接地址添加useSSL = false,适用于测试。
  2. 数据库 URL 连接地址添加useSSL = true,并且提供服务器的验证证书。

配置文件如下即可:

 <!-- 数据库连接字符串 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?useSSL=false&amp;serverTimezone=GMT%2B8&amp;characterEncoding=utf-8"></property>

总结

通过对于 MySQL 抛出异常的几种常见解决方式的总结,加深对于 MySQL 底层的了解。只要是干开发,错误是不断地,要善于总结。同时,要充分掌握开发的底层原理,不同的版本迭代作为开发者要及时了解,不然永远跟不上技术的发展。

本文分享自华为云社区《MySQL 异常有这一篇就够了!MySQL 抛出异常的几种常见解决方式小结(时区问题、SSL 连接问题、8.0 高版本兼容问题)》,原文作者:白鹿第一帅 。

点击关注,第一时间了解华为云新鲜技术~

MySQL 异常有这一篇就够了!相关推荐

  1. MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结

    Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connectio ...

  2. NDK撩妹三部曲(四)—NDK 开发如何优雅的定位 Native 异常,看这篇就够了

    NDK 开发如何优雅的定位 Native 异常,看这篇就够了 从何说起? 摘要 案例实操 aaddr2line objdump ndk-stack 1.假设我们已经通过 adb logcat 拿到了程 ...

  3. MySQL ORDER BY排序一篇就够了

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. 文章目录 MySQL 排序一篇就够了 ORDER BY 语法 实践出真知 实践准备 静态排序 动态排 ...

  4. Mysql全套看这一篇就够了特别详细

    一.MySQL简介... 1 二.MySql的用户和权限管理... 12 三.Mysql逻辑架构简介... 15 四.主从复制... 21 五.SQL预热... 24 六.索引优化分析... 28 七 ...

  5. Mysql只看这一篇就够啦

    目录 (注意!这只是我本人自己对sql的理解,是个小白,大佬随便看看就好了) 一)mysql基本语法 二)聚合函数 三)其他语法 on 和where 的区别 四)join连接之7种连接 首先我们建立两 ...

  6. MySQL基础入门看这篇就够了,java反射原理hash

    Copyright is reserved. Please indicate the source for forwarding */ ​ SELECT * FROM teachers WHERE c ...

  7. MySQL基础之这一篇就够了

    1 MySQL 常见命令 -- 小知识点 -- 1. 自增属性必须是主键 -- 2. 建表时指定联合主键 CREATE TABLE employee (name VARCHAR(25),deptId ...

  8. 学好MySQL看完这一篇就够了(建议收藏)

    目录 1.MySQL简介: 2.RDBMS 术语: 3.数据类型 : 4.数据库操作 说明: 5.MySQL的约束: 6.存储引擎 7.数据表操作: 1.查看表结构 2.查看建表语句 3.修改表 8. ...

  9. 基础 | 零散的MySql基础记不住,看这一篇就够啦

    ❝ 这是小小本周的第二篇,本篇将会着重的讲解关于MySql基础的内容,MySql基础看这一篇就够啦. ❞ 送书反馈与继续送书 之情小微信公众号第一次送书,Java深度调试技术,书已经被中奖者麦洛签收, ...

最新文章

  1. python零基础怎么学-Python怎么学?零基础如何顺利入门Python?
  2. 初步了解OpenSSL命令
  3. Asp.net开发中甩掉.ashx .asmx
  4. 命令行下mysql新建用户及分配权限
  5. overscroll-behavior称为“滚动链”
  6. 识别出脸部以及给脸部打马赛克
  7. R语言-异常数据处理3
  8. 【题解】CF#713 E-Sonya Partymaker
  9. mysql 伪哈希_MySQL技巧--伪哈希索引
  10. ChIP-seq 数据分析
  11. learun力软敏捷开发框架
  12. 超尴尬婆婆对儿媳的新婚之夜的指导
  13. Tushare Day7—— 第19章投资组合理论及拓展
  14. [白话解析] 深入浅出支持向量机(SVM)之核函数
  15. 机器人前沿--下肢外骨骼机器人
  16. Notepad++ 提示:An exception occurred due to plugin: HexEditor.dll 出错
  17. 三行代码可视化神经网络特征图
  18. 电脑开机启动项选择快捷键大全
  19. BD电影搜索-自定义过滤器
  20. 快速识别台式机的内存条

热门文章

  1. Bootstrap CSS 编码规范之单行规则声明
  2. Array.of()方法
  3. 第二十二课php注入,php第二十三节课
  4. docker学习1--dockerfile
  5. HTML语言字符编码
  6. PAT 1004 成绩排名 (20)(代码)
  7. [LeetCode]657.Judge Route Circle
  8. NSDate分类,把系统返回的时间与现在进行比较---秀清
  9. Sdut 2165 Crack Mathmen(数论)(山东省ACM第二届省赛E 题)
  10. linux导报命令,LINUX下安装与卸载DM8