MySQL JDBC驱动版本与数据库版本的对应关系及注意事项
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-java | MySQL | JDK | 补充 |
---|---|---|---|
8.0.x | 5.6、5.7、8.0 4.2 | JDK 8.0或更高版本 | 全面上市。推荐版本。 |
5.1.x | 5.6、5.7、8.0 3.0、4.0、4.1、4.2 | JDK 5.0和JDK 8.0或更高版本 | 一般可用性 |
相关文章