分析MySQL抛出异常的几种常见解决方式


Posted in MySQL onMay 18, 2021

前言

报错如下:

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、错误产生描述

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

分析MySQL抛出异常的几种常见解决方式

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

1.2、解决方式

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

分析MySQL抛出异常的几种常见解决方式

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

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抛出异常的几种常见解决方式

三、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 自动注册的,通常是不需要手动加载驱动类。修改之后的配置文件如下图所示:

分析MySQL抛出异常的几种常见解决方式

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

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

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

分析MySQL抛出异常的几种常见解决方式

分析MySQL抛出异常的几种常见解决方式

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

注意: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、解决方式

  • 数据库 URL 连接地址添加useSSL = false,适用于测试。
  • 数据库 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异常的解决方式的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
mysql多表查询-笔记七
Apr 05 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 MySQL
MySQL 查询速度慢的原因
May 25 MySQL
MySQL完整性约束的定义与实例教程
May 30 MySQL
MySQL 时间类型的选择
Jun 05 MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 MySQL
MySQL七种JOIN类型小结
Oct 24 MySQL
mysql数据插入覆盖和时间戳的问题及解决
Mar 25 MySQL
Mysql使用全文索引(FullText index)的实例代码
Apr 03 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
MySQL主从切换的超详细步骤
Jun 28 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 #MySQL
详解MySQL连接挂死的原因
详解Mysql和Oracle之间的误区
May 18 #MySQL
详解GaussDB for MySQL性能优化
详解MySQL的Seconds_Behind_Master
May 18 #MySQL
MySQL优化之如何写出高质量sql语句
May 17 #MySQL
mysql数据库入门第一步之创建表
You might like
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
Python素数检测的方法
2015/05/11 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
python PyTorch预训练示例
2018/02/11 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
pymysql模块使用简介与示例
2020/11/17 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
AJAX都有哪些有点和缺点
2012/11/03 面试题
毕业生机械建模求职信
2013/10/14 职场文书
电工工作职责范本
2014/02/22 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
PHP控制循环操作的时间
2021/04/01 PHP