博主打算从0-1讲解下java进阶篇教学,今天教学第八篇:Java链接MySql数据库异常
本文主要记录下日常项目中java链接mysql异常情况,并且提供解决方案!本文会持续更新,有友友们留言的异常的话,我也会整理提供进去。谢谢大家支持!
一、Communications link failure
具体报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
Caused by: java.net.ConnectException: Connection timed out: connect
这个问题简单点说就是链接数据库失败,链接超时!
错误原因:
- 网络问题: 可能是由于网络不稳定或网络配置问题导致无法建立到数据库服务器的连接。
- 数据库服务器未启动: 如果数据库服务器未正确启动或已停止,将无法建立连接。
- 防火墙或网络代理问题: 防火墙或网络代理可能阻止了连接尝试,导致连接失败。
解决方案:
- 检查网络连接: 你可以在windows中使用cmd中,ping ip地址,如:ping 127.0.0.1,看看是否丢包,如果访问超时或者丢包则代表你访问不了这个ip地址。
- 确保数据库服务器运行: 你需要确保下你的windows或者是liunx服务器中mysql服务是否启动。
- 检查防火墙和网络代理设置: 如果你能ping通ip地址,但是telnet ip 端口号,例如:telnet 127.0.0.1 3306 不通,这个时候如果开启了防火墙,可能会导致你访问不了3306端口号,另外如果是云liunx服务器,则需要在你的云控制台中安全组或者安全策略中放行3306端口,并且查看下liunx服务器是否开启防火墙,如果没开启则不用管,开启了,则需要添加3306端口白名单。
- 检查数据库连接字符串: 确保数据库连接字符串配置正确,包括主机地址、端口号、用户名和密码。可以尝试手动连接数据库以确认连接参数是否正确。
二、Access denied for user
具体报错:java.sql.SQLException: Access denied for user 'root'@'122.235.136.146' (using password: YES)
错误原因:
你访问mysql数据库的账号或者密码错误。
解决方案:
确保数据库连接字符串配置正确,包括主机地址、端口号、用户名和密码。可以尝试手动连接数据库以确认连接参数是否正确。
三、javax.net.ssl.SSLHandshakeException
具体报错:Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
错误原因:
你的链接mysql字符串中,useSSL=true。
解决方案:
将useSSL=true改成useSSL=false 即可。
例如:
jdbc:mysql://127.0.0.1:3306/bbs?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
四、mysql8
如果你使用的是mysql8,那么驱动需要更新成8.0.x的。
驱动:com.mysql.cj.jdbc.Driver
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency>
在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong,或者像下面这样配置:
jdbc:mysql://127.0.0.1:3306/bbs?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
五、待续
如果有友友们想提供异常也是可以评论留言。