mysql异常:这一篇就够了,mysql抛出异常的几种常见解决方式小结(代码片段)

白鹿第一帅 白鹿第一帅     2023-01-23     261

关键词:

Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! 几种解决方式小结

文章目录


前言

在本文中,我总结了开发过程中最为常见的几种 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 底层的了解。只要是干开发,错误是不断地,要善于总结。同时,要充分掌握开发的底层原理,不同的版本迭代作为开发者要及时了解,不然永远跟不上技术的发展。


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

mysqlorderby排序一篇就够了

​文章目录​​MySQL排序一篇就够了​​​​ORDERBY语法​​​​实践出真知​​​​实践准备​​​​静态排序​​​​动态排序​​​​总结​​MySQL排序一篇就够了工作中常常会使用ORDERBY进行排序,了解ORDERBY多种排序方式... 查看详情

python导包问题,这一篇就够了(代码片段)

解决办法:将项目所在的根目录添加到sys.path中在入口文件中加入如下代码:importsysimportos#将项目的根目录添加到sys.path中BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.append(BASE_DIR)#导入包或模块fromdb.mysql.my_connecti 查看详情

mysql面试题看这一篇就够了

现在mysql相关的面试,面试官总会问一些相关的技术问题。在这里,因此就总结一些常见的mysql面试题,都是自己平时工作的总结以及经验。希望大家看完,能避开”面试坑”。1、MySQL主从复制的原理。(1)、主库必须开启二进... 查看详情

图文详解cdc技术,看这一篇就够了!

点击上方“朱小厮的博客”,选择“设为星标”后台回复"书",获取后台回复“k8s”,可领取k8s资料这篇文章是对变更数据捕获(CDC) 实践的介绍,而不是对特定工具的深入探讨。假设我们正在构建一个简单... 查看详情

redis这一篇就够了

概述什么是RedisRedis(RemoteDictionaryServer)是一个使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持... 查看详情

ajax入门这一篇就够了

什么是AjaxAjax(AsynchronousJavaScriptandXML)异步JavaScript和XMLAjax实际上是下面这几种技术的融合:(1)XHTML和CSS的基于标准的表示技术(2)DOM进行动态显示和交互(3)XML和XSLT进行数据交换和处理(4)XMLHttpRequest进行异步数据检索(5)Javascript将以上... 查看详情

强化学习入门这一篇就够了!!!万字长文

强化学习强化学习入门这一篇就够了万字长文带你明明白白学习强化学习...强化学习入门这一篇就够了强化学习前言一、概率统计知识回顾1.1随机变量和观测值1.2概率密度函数1.3期望1.4随机抽样二、强化学习的专业术语2.1Stateanda... 查看详情

elasticsearch入门,看这一篇就够了(代码片段)

Elasticsearch入门,看这一篇就够了前言可视化工具kibanakibana的安装kibana配置kibana的启动Elasticsearch入门操作操作index创建index索引别名有什么用删除索引查询索引exist索引操作document插入document查询document删除document更新document使用... 查看详情

mysql8.0安装详细教程,看这一篇就够了

同学大家从今天开始我们就开始了,为期三个月的MySQL,中高级篇幅的学习,欢迎大家持续关注,今天我们首先传授大家mysql软件的安装,以及8.0版本和5.7版本之间同步教学,(我也是名学生,哪里... 查看详情

json入门看这一篇就够了

什么是JSONJSON:JavaScriptObjectNotation【JavaScript对象表示法】JSON是存储和交换文本信息的语法。类似XML。JSON采用完全独立于任何程序语言的文本格式,使JSON成为理想的数据交换语言S为什么需要JSON提到JSON,我们就应该和XML来进行对... 查看详情

elasticsearch入门,这一篇就够了(代码片段)

实时搜索引擎ElasticsearchElasticsearch(简称ES)是一个基于ApacheLucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。Elasticsearch简介Elasticsearch是什么Elasticsear... 查看详情

jetpackworkmanager看这一篇就够了~

前言最近有读者反馈,在我的新书​​《AndroidJetpack开发:原理解析与应用实战》​​中并没有提及到WorkManager,这是因为目前这个东西在国内并不是很好用。最近因为工作需要正好研究了下,也作为补充章节分享给读者。什么... 查看详情

[转]关于深度学习,看这一篇就够了

关于深度学习,看这一篇就够了原文地址:http://www.dlworld.cn/XueXiSuanFa/13.html[日期:2016-04-26]来源:36氪 作者:[字体:大 中 小]    编者按:本文作者王川,投资人,中科大少年班校友,现居加州硅谷,个人微信号... 查看详情

json格式对象该怎么传?看这一篇就够了!

一、List<Map>一般会使用在SQL语句的返回结果上代码如下:@Query(value="selectuser_name,user_agefromsys_userwheredept_id=?,nativeQuery=true)List<Map>findUserInfoById(LongdeptId);根据部门的ID查 查看详情

mysql思维总结(这一篇就够!)(代码片段)

MySql一、数据的相关概念数据库的好处数据库的常见概念数据库存储数据的特点常见的数据库管理系统二、DQL(数据查询语言)基础查询条件查询获取客户端的字符集编码格式分组查询常见函数分组函数链接查询三、DML&#x... 查看详情

python数据分析电商用户行为,看完这一篇就够了(代码片段)

本文分析主要内容分为下四个部分:一.项目背景二.数据集介绍三.数据清洗四.分析模型构建五.总结一.项目背景项目对京东电商运营数据集进行指标分析以了解用户购物行为特征,为运营决策提供支持建议。本文采用了My... 查看详情

go全总结学习go这一篇就够了

目录1、基础篇1.1概述1.2变量 1.3常量1.4数据类型 整数类型 查看详情

看懂serverless,这一篇就够了

一、无服务器(Serverless)计算是什么云计算涌现出很多改变传统IT架构和运维方式的新技术,比如虚拟机、容器、微服务,无论这些技术应用在哪些场景,降低成本、提升效率是云服务永恒的主题。过去十年来,我们已经把应用... 查看详情