赞
踩
大家在连接mysql的时候,启动项目,会警告你推荐使用com.mysql.cj.jdbc.Driver 而不是com.mysql.jdbc.Driver 。
当5之后的版本选择com.mysql.jdbc.Driver
的时候,会有警告提示,替换为com.mysql.cj.jdbc.Drive
查看源码可知,老版本的Driver
继承了新版本的Driver
,通过继承的方式兼容老版本,并添加了告警提示,如下:
- public class Driver extends com.mysql.cj.jdbc.Driver {
- public Driver() throws SQLException {
- }
-
- static {
- System.err.println("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时,配置是需要下面这样的:
- driver-class-name=com.mysql.jdbc.Driver
- url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
- username=root
- password=
在使用com.mysql.cj.jdbc.Driver时,则是需要下面这样的配置的:
- driver-class-name=com.mysql.cj.jdbc.Driver
- url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&?useUnicode=true&characterEncoding=utf8&useSSL=false
- username=root
- password=
注意:
需要指定时区(serverTimezone=UTC)和 使用SSL (useSSL=false)
另外还需注意:
在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong,像下面这样配置:
- driver-class-name=com.mysql.cj.jdbc.Driver
- url=jdbc:mysql://localhost:3306/test?serverTimezone=Shanghai&?useUnicode=true&characterEncoding=utf8&useSSL=false
- username=root
- password=
情况分析:
如果你maven使用的是6版本以及以上版本的mysql驱动:
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>8.0.16</version>
- </dependency>
这是使用的是8.0.16版本的Mysql驱动,那么会报一下的错误:
- 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自动注册
- 并且通常不需要手动加载驱动程序类。
- 这时候你就要把com.mysql.jdbc.Driver 改为 com.mysql.cj.jdbc.Driver
但是你改完之后还是会报错:
- 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的现有应用程序,verifyServerCertificate属性设置为“false”。
- 您需要通过设置useSSL = false显式禁用SSL,
- 或者设置useSSL = true并为服务器证书验证提供信任库。
这个时候如果不需要SSL验证,就在url后面加useSSL=false
这个时候就不会报警告了.
使用mysql 8.0.16 版本的驱动的时候解决如下报错:
java.sql.SQLException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone.
这是由于数据库和系统时区差异所造成的,在jdbc连接的url后面加上serverTimezone=GMT即可解决问题,如果需要使用gmt+8时区,需要写成GMT%2B8,否则会被解析为空。
再一个解决办法就是使用低版本的MySQL jdbc驱动,5.1.28不会存在时区的问题。
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别_DayFight_DayUp的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。