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

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

文章目录

    • Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! 几种解决方式小结
  • 前言
  • 一、代码配置的数据库名称或者密码与本地数据库不一致
    • 1.1、错误产生描述
    • 1.2、解决方式
  • 二、导入的非本地项目文件与本地的数据库版本不匹配
    • 2.1、错误产生描述
    • 2.2、解决方式
  • 三、MySQL 高版本配置加载驱动类包出错问题(以 MySQL 8.0 为例)
    • 3.1、错误产生描述
    • 3.2、解决方式
    • 3.3、MySQL 不同版本的驱动类如何查看
  • 四、数据库连接字符串高版本配置出错(时区问题)
    • 4.1、错误产生描述
    • 4.2、解决方式
  • 五、为什么数据库中写入数据相差 8 个小时?
    • 5.1、错误产生描述
    • 5.2、解决方式
  • 六、SSL 连接问题
    • 6.1、错误产生描述
    • 6.2、解决方式
  • 总结


前言

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

在这里插入图片描述


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vnc用户名 查看linux_vnc用户名未被识别,5步教你如何解决vnc用户名未被识别

在进行vnc使用时&#xff0c;很多小伙伴会出现用户名未被识别的情况&#xff0c;那如何解决vnc用户名未被识别呢&#xff1f;咱接着往下看。使用工具&#xff1a;IIS7服务器管理工具主程序界面图&#xff1a;官网地址&#xff1a;IIS7服务器管理工具作为IIS7服务器管理工具&…

IntelliJ IDEA 乱码:全网最全 4 种方法完美解决 IntelliJ IDEA 控制台中文乱码问题

文章目录前言一、修改当前 Web 项目 Tomcat Server 的虚拟机输出选项二、修改 IntelliJ IDEA 全局编码、项目编码、属性文件编码三、IntelliJ IDEA 中自定义虚拟机选项四、直接修改 IntelliJ IDEA 配置文件的编码信息五、修改成功乱码问题解决总结前言 IntelliJ IDEA 如果不进行…

JVM 调优 1:“精通 JVM 调优,有过 JVM 调优经验”简历敢写吗?薪资涨 5k 的技巧

文章目录前言一、部分大厂对于 JVM GC 的面试题1.1、百度1.2、顺丰1.3、京东1.4、淘宝1.5、阿里、蘑菇街二、Garbage Collectors&#xff08;GC&#xff09;作何使用三、GC 的十种类型四、JVM 的版本参数信息4.1、查看 Java 启动时所有默认的命令行参数4.2、查看 Java 启动时 G…

ip地址合不合法怎么看_电子印章合不合法?两部门再发意见认定

近日&#xff0c;最高法、国家发改委联合发布 《关于为新时代加快完善社会主义市场经济体制提供司法服务和保障的意见》以助力经济高质量发展、建设高标准市场体系为出发点和落脚点&#xff0c;从市场主体、产权保护、公平交易、市场秩序、民生保障、服务开放、高效解纷等七个方…

JVM 调优 2:GC 如何判断对象是否为垃圾,三色标记算法应用原理及存在的问题?

文章目录前言一、如何判断一个对象是否为垃圾&#xff1f;1.1、reference count&#xff08;引用计数&#xff09;1.2、reference count&#xff08;引用计数&#xff09;存在的问题二、Root Searching&#xff08;根可达算法或根搜索算法&#xff09;2.1、Root Searching 释义…

班尼机器人怎么拆_博鼎建筑科技外墙错台打磨机器人和外墙螺杆洞封堵机器人—自升造楼平台1+N执行器...

继上期的混凝土整平机和智能喷淋养护系统&#xff0c;本期给大家介绍的是实际应用在自升造楼平台外墙环轨车上的外墙错台打磨机器人和外墙螺杆洞封堵机器人。外墙错台打磨机器人传统外墙错台处理&#xff0c;需要人工拿凿具对外墙面错台进行凿平处理。凿具重、操作人工容易疲劳…

架构师基础必备:“腹有诗书气自华”,驰骋一线大厂不是梦,抓紧收藏

文章目录前言一、软件1.1、何为软件&#xff1f;1.2、计算机软件的分类1.2.1、系统软件1.2.2、应用软件1.3、软件系统体系结构1.3.1、C/S 结构&#xff08;桌面应用程序&#xff09;1.3.2、B/S 结构&#xff08;Web 应用程序&#xff09;1.3.3、Web 服务器与数据库服务器1.3.4、…

JDK 7-JDK 21:Oracle Java SE 支持路线图/Oracle Java SE Support Roadmap 持续更新

文章目录前言一、Oracle Java SE 产品版本二、Java SE 8 的公共更新结束三、参考文档总结前言 几十年来&#xff0c;Java 生态系统已经成功地经历了这个过程&#xff0c;经历了十次主要的平台修订。长期强大的向后兼容性保护了整个生态系统的投资。同时&#xff0c;随着时间的推…

multisim中轻触开关在哪_现货供应轻触开关|品质确保|厂家直销

轻触开关是现今社会生活当中不可或缺的电子元器件之一&#xff0c;那么大家在使用的过程当中是否注意到一些细节问题。首先&#xff0c;我们要注意产品的放置要尽量避免接触腐蚀性气体以及过于潮湿的环境&#xff0c;这样很容易造成产品的损坏&#xff0c;减少轻触开关的使用寿…

DDoS 攻击与防护(一):如何识别 DDoS 攻击?DDoS 防护 ADS 服务有哪些?

文章目录前言一、什么是 DDoS 防护 ADS&#xff1f;1.1、什么是 DDoS 攻击&#xff1f;1.2、如何识别 DDoS 攻击&#xff1f;1.3、从 Web 访问流程分析 DDoS 攻击1.4、DDoS 攻击类型二、DDoS 防护 ADS 介绍2.1、Anti-DDoS 流量清洗2.2、DDoS 原生高级防护2.3、DDoS 高防三、DDo…

收藏功能_六款多功能榻榻米,装完你家会大一半!超实用,收藏

原标题&#xff1a;六款多功能榻榻米&#xff0c;装完你家会大一半&#xff01;超实用&#xff0c;收藏当今社会城市的生活压力大&#xff0c;在外日夜打拼&#xff0c;回到家中只想做一个慵懒派&#xff0c;随性舒适的榻榻米&#xff0c;功能样式丰富&#xff0c;能让你彻底释…

混凝土墙开洞_新乐专业混凝土切割报价适中

新乐专业混凝土切割报价适中粘碳纤维加固&#xff0c;屋顶加层。本公司采用目前的钢筋混凝土切割结构分离和水钻排孔技术。真正实现对不同规格和形状的桥梁、道路、烟囱、建筑立柱、钢筋砼墙体、砖混结构墙体、建筑大梁等建筑物、构筑物实施无损切割(传统的建筑改造或局部拆除分…

class触发后让另一个class加样式_Bootstrap的按钮组样式

将一系列的.btn包裹在.btn-group内&#xff0c;并使用我们提供的插件&#xff0c;可以实现选择按钮、选取块状区的行为功能。<div class"row mt-5 d-block"><div class"btn-group"><button class"btn btn-primary">Left</b…

bsp模型适用于图计算_【论文解读】目标检测之RFBnet模型

原创声明&#xff1a;本文为 SIGAI 原创文章&#xff0c;仅供个人学习使用&#xff0c;未经允许&#xff0c;不能用于商业目的。其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》&#xff0c;清华大学出版社&#xff0c;雷明著&#xff0c;由SI…

win10雷电3接口驱动_“雷电3”接口知识大科普

近年来部分高端笔记本电脑在接口上会采用一种叫“雷电3”的新接口。今天小编就为大家解读一下“雷电3”接口的特性。最早的雷电接口雷电接口是由Intel开发定制的、接口类型为mini DP&#xff0c;在雷电3接口出来之前&#xff0c;雷电1和雷电2都是作为在苹果MAC上使用的&#xf…

springboot怎么返回404_深度分析:SpringBoot异常捕获与封装处理,看完你学会了吗?...

简介日常开发过程中&#xff0c;难免有的程序会因为某些原因抛出异常&#xff0c;而这些异常一般都是利用try &#xff0c;catch的方式处理异常或者throw&#xff0c;throws的方式抛出异常不管。这种方法对于程序员来说处理也比较麻烦&#xff0c;对客户来说也不太友好&#xf…

新生成长记;关于zzulioj1056,幸运数字

刚刚接触代码的我&#xff0c;对计算机愈来愈好奇&#xff0c;开学的两个月&#xff0c;几乎没看书只顾着做题&#xff0c;当然&#xff0c;不会就百度&#xff0c;或者看大佬的博客&#xff0c;这些都是好东西&#xff0c;实在看不懂的&#xff0c;就拿着跑去问学长&#xff0…

获取form表单_【第1535期】前端 Form 的表单的一个通用解决方案

前言今日早读文章由阿里布达投稿分享。布达&#xff0c;Alibaba Fusion项目组的。花名潕量。主要专注在设计系统、组件、可视化搭建这个领域正文从这开始&#xff5e;&#xff5e;Fusion Next - Form 表单解决方案前端的Form 表单主要用于解决数据获取、数据校验、数据赋值 这三…

react取消捕获_React学习笔记(三)

React学习笔记&#xff08;三&#xff09;&#xff0c;组件的生命周期React中组件也有生命周期&#xff0c;也就是说也有很多钩子函数供我们使用, 组件的生命周期&#xff0c;我们会分为四个阶段&#xff0c;初始化、运行中、销毁、错误处理(16.3之后)初始化在组件初始化阶段会…

快捷键_AutoCAD 2021中的默认快捷键、新建或编辑快捷键

文&#xff1a;CAD钟日铭。欢迎关注和点赞支持。在使用AutoCAD进行制图的过程中&#xff0c;掌握一些快捷键会提高操作效率。所谓的快捷键是指用于启动命令的键组合。例如&#xff0c;按CtrlN组合键(快捷键)新建图形文件&#xff0c;按 CtrlO组合键可打开图形文件&#xff0c;按…