MySQL JDBC驱动版本与数据库版本的对应关系及注意事项

2022-11-24 00:00:00 数据库 版本 报错 设置 驱动

MySQL JDBC驱动版本与数据库版本的对应关系及注意事项

事情发生

学了三遍的servlet,经典老师又教的万遍登陆注册,并且让实现,并且让演示,我们老师可能和之前的小学期公司老师
完全没有沟通过,我们小学期大作业都做了一个小项目出来还搁这登陆注册。
就把五个月前写的一个小项目拿出来,是一个类似菜鸟教程的网站,不过只有java的教程,这都是后话,

项目地址为:https://gitee.com/zxeao/Study_Station.git
大佬有兴趣可以看看

里面有登录注册,就想着跑一下,给老师演示演示得了,问题出现了,因为之前的服务器过期了,我把数据库环境搭在自己的电脑上,跑起来之后,后台报错,前端登录也是500错误,这就奇了怪了。

错误缘由

前端报错如下:


这谁受得了,自己亲生的项目在自己手里跑不起来,于是研究了一下报错,

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.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
	at utils.DBHelper.getConnection(DBHelper.java:27)
	at DAO.UserDao.queryLogin(UserDao.java:22)
	at Controller.loginController.doPost(loginController.java:29)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

发现问题的根源就在DBHelper包,数据库没有链接上,我在idea还是在navicat上都能连接上,正当我百思不得其解,突然想到老师讲过,mysql对应的jdbc驱动版本的问题。
查阅相关资料之后,得知是由于jdbc驱动包引发的问题,我之前服务器上的MySQL版本是8+版本,我查看了现在本机的MySQL版本


果然,版本不一致,我之前在maven里面配置的也是8.0.15的驱动版本,正想着去找5+数据库的驱动版本,打开我的pom一看,


这不就有么?之前做的准备足了现在就不用坐牢了。

解决方法

于是把MySQL驱动的版本换成5.1.38,


更新之后,正当我满心欢喜的等待跑起来,正常登录一下的时候,问题又出现了

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:375)
	at utils.DBHelper.getConnection(DBHelper.java:24)
	at DAO.UserDao.queryLogin(UserDao.java:22)
	at Controller.loginController.doPost(loginController.java:29)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

不是,现在版本也对应上了,为什么还会报错,跑不起来呢?
问题就在

com.mysql.cj.jdbc.Driver

大家肯定还见过

com.mysql.jdbc.Driver

这俩区别在哪,大家看我下面的注意事项

就是这俩的问题,当我把cj去掉之后,就跑起来了


只能说确实好看。

版本对应

所以我简单做了个整理,把驱动版本和MySQL数据库版本做个可用性对应。

mysql-connector-javaMySQLJDK补充
8.0.x5.6、5.7、8.0 4.2JDK 8.0或更高版本全面上市。推荐版本。
5.1.x5.6、5.7、8.0 3.0、4.0、4.1、4.2JDK 5.0和JDK 8.0或更高版本一般可用性

相关文章