当前位置: 首页 > 科技观察

MySQL异常这篇文章就够了!

时间:2023-03-12 22:51:27 科技观察

前言本文总结了MySQL在开发过程中最常抛出的异常以及解决方法,包括高版本驱动问题、时区配置问题、SSL连接问题等,是一个经验总结邮政。个人觉得这篇文章足以解决当前项目中遇到的所有MySQL问题。同时也希望本文能对MySQL数据库的初学者有一定的指导作用。错误如下:CouldnotopenJDBCConnectionfortransaction;嵌套异常是java.sql.SQLException:无法从基础数据库获取连接!这类错误直接看定义,一句话:JDBC驱动抛出异常,无法连接数据库。1.代码配置的数据库名或密码与本地数据库不一致1.1.错误描述第一种是最常见的错误:代码配置的数据库名或密码与本地数据库不一致,抛出异常。如上图所示,在配置文件中,前面的name属性是默认的,不需要更改。对于用户名,一般是root,可以直接通过数据库管理软件查看本地配置。数据库密码是自己设置的。.1.2.处理方法修改配置文件对应的名称和密码。2、导入的非本地工程文件与本地数据库2.1版本不匹配。错误描述第二种常见错误:IDE导入的非本地工程文件(以Eclipse为例)与本地数据库版本不匹配。比如:你的eclipse工程中导入的jar包依赖8.0版本,但是你本地安装了5.0版本的MySQL数据库,自然会报错。2.2.解决方案在你导入的项目中找到ReferencedLibraries,右键→BuildPath→ConfigureBuildPath...去掉项目依赖的8.0MySQL驱动,添加你本地安装的5.0版本。3、高版本MySQL配置加载驱动包出错(以MySQL8.0为例)。该错误是更新MySQL版本后驱动包发生变化导致的。新的驱动程序类是com.mysql.cj.jdbc.Driver。3.1.错误描述如下:Loadingclasscom.mysql.jdbc.Driver'.Thisisdeprecated.Thenewdriverclassiscom.mysql.cj.jdbc.Driver'.ThedriversisautomaticallyregisteredviatheSPIandmanuallyloadingofthedriverclassisgenerallyunnecessary.错误描述:不推荐使用驱动类'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自动注册,通常不需要手动加载驱动类。修改后的配置文件如下图所示:3.3,不同版本MySQL如何查看驱动类对于MySQL驱动类,我们在查看各个版本的时候,点击驱动jar包可以直接查看驱动所在的位置。例如8.0版本为com.mysql.cj.jdbc.Driver,如下图所示:4.数据库连接字符串高版本配置错误(时区问题)注意:MySQL6.0及以后版本需要配置时区。4.1.错误描述如下:2020-01-1400:45:30,876ERROR[DruidDataSource.java:616]:initdatasourceerrorjava.sql.SQLException:Theservertimezonevalue'???ú±ê×??±??'isunrecognizedorrepresentsmorethanonetimezone.YoumustconfigureeithertheserverorJDBCdriver(通过服务器时区配置属性)使用更具体的时区值(如果您想利用时区支持)。错误描述:服务器时区值“????±××?±?cannotrecognizeorrepresentmorethanonetimezone.4.2.解决方案我们可以使用时区支持来配置服务器或JDBC驱动(通过serverTimezone配置property)使用更具体的时区值,配置文件如下:5.为什么写入数据库的数据相差8小时?5.1.错误描述Java数据库连接使用UTC时区(世界标准时间),即serverTimezone=UTC,而北京时间比UTC早8小时,即UTC+08:00,如果我们直接使用serverTimezone=UTC,写入数据库的数据会早8小时。如果配置如下,数据写入数据库时??相差8小时:5.2。解决方案我们可以修改serverTimezone为北京时间GMT%2B8,上海时间Asia/Shanghai或者香港时间Hongkong。配置文件如下:另外,也可以修改MySQL中的my.ini配置文件。本文仅用于解决相应的问题,不再详述。六、SSL连接问题6.1、错误产生描述报错如下:SunOct1400:45:30CST2018WARN:EstablishingSSLconnectionwithoutserver'sidentityverificationisnotrecommended.AccordingtoMySQL5.5.45+,5.6.26+and5.7.6+requirementsSSLconnectionmustbeestablishedbydefaultifexplicitoptionisn'tset.ForcompliancewithexistingapplicationsnotusingSSLtheverifyServerCertificatepropertyissetto'false'.YouneedeithertoexplicitlydisableSSLbysettinguseSSL=false,orsetuseSSL=true并提供用于服务器证书验证的信任库。错误描述:不建议在没有服务器认证的情况下建立SSL连接。根据MySQL5.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,并提供服务器的验证证书。配置文件如下:propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8">小结通过对MySQL抛异常的几种常见解决方案的总结,加深对MySQL底层的理解。只要在做开发,错误就会不断,所以一定要善于总结。同时,要充分把握发展的基本原则。作为开发者,必须及时了解不同的版本迭代,否则永远跟不上技术的发展。