前言
记录一些今天通过jdbc连接mysql数据库时遇到的报错和解决方案
1.SSL连接问题
第一次运行,好家伙,上来先是一个黄条的大警告
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并为服务器证书验证提供信任库。
出现警告的原因我搜了一下,网上说主要是JDBC的版本与MySQL的版本不兼容,而MySQL在高版本需要指明是否进行SSL连接。
解决方法也简单,警告里也说了,设置useSSL=false显式禁用SSL就好了,在url的末尾加上?useSSL=false。(注:问号要带上,用空格代替问号无效)
2.找不到数据库问题
黄条警告解决了但是还有一个错误没解决
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database ‘test’
翻译:
com.mysql.jdbc.exceptions.jdbc4.mysql语法错误异常:未知数据库“test”
找不到test数据库,但是我的确是有这个“test”的

那么问题出在哪里?
其实这里是我把【数据库】和【连接】的概念弄混了。我们用mysql的时候一般是先建立一个【连接】,然后在这个【连接】里新建【数据库】,也就是说“test”只是一个【连接】,真正要指向的【数据库】应该是“db2”。我们要填写的url信息应该是【数据库】的名称以及【连接】的用户名和密码。
解决方法:把url里的“test”改成“db2”
3.版本、驱动问题
解决完我以为就结束了,刚一运行结果又报错,是我太天真了
java.sql.SQLException: Unknown system variable ‘query_cache_size’
翻译:
java.sql。SQLException:未知系统变量“query_cache_size”
说实话,翻译了我也没看懂是啥问题,于是又开始百度。
最终的原因以及解决方法:
但是换了高版本之后再次运行又出现了新的问题
Loading class
com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.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自动注册,通常不需要手动加载驱动程序类。
翻译之后原因和解决方法就都十分清晰了,在mysql8.0的jar中已经弃用原先的驱动,我们直接用新的替换掉就行了。

4.时区问题
然后还有一个问题没解决。。。
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.
翻译:
java.sql。SQLException:服务器时区值’�й���ʱ��’ 无法识别或代表多个时区。如果要利用时区支持,必须配置服务器或JDBC驱动程序(通过serverTimezone配置属性)以使用更具体的时区值。
这里的解决方法我百度到了两种,测试后都能有效解决问题。
一种是通过root用户登录mysql,然后修改当前时区配置,可以参考一位大佬写的博客,附链接如下:
https://blog.csdn.net/qq_43371004/article/details/98385445
另一种是直接在url的末尾添加
?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
也附个链接:
https://zhuanlan.zhihu.com/p/308630477
总结
提示:不同的问题可能是由不同的原因导致的,甚至同一个问题也会由不同的原因导致,解决的方法也有很多种,可能也不尽相同,此记录仅供参考,同时也提醒不要和我犯一样的问题,希望能帮到你。