JDBC连接MySQL数据库失败,请求解决连接异常问题
问题解决:JDBC连接MySQL出现连接失败空指针异常
这个错误的核心原因是JDBC驱动版本与MySQL版本不兼容,旧版com.mysql.jdbc.Driver驱动(对应mysql-connector-java 5.x系列)无法适配高版本MySQL(8.0+)的握手协议,导致serverVariables空指针。
解决步骤:
更换兼容的JDBC驱动
- 将驱动类从
com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver(MySQL 8.0+官方推荐驱动) - 连接URL必须补充时区参数,同时建议添加
allowPublicKeyRetrieval=true避免公钥检索错误
- 将驱动类从
更新驱动版本
- 若使用Maven,修改依赖为8.x系列版本:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> - 手动导入jar包的话,下载对应8.x版本的jar替换旧驱动
- 若使用Maven,修改依赖为8.x系列版本:
修改后的测试代码
import java.sql.*; public class Main { public static void main(String[] args) throws SQLException { // 显式注册驱动(MySQL 8.0+支持自动注册,也可省略此步骤) try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } // 完善连接URL参数 String mysqlUrl = "jdbc:mysql://localhost:3306/sql_invoicing?autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "你的密码"); System.out.println("Connection established......"); // 使用后关闭连接 con.close(); } }额外检查项
- 确认MySQL版本:如果是5.x版本,使用5.x系列驱动即可,但要注意5.x驱动不支持JDK 9+;如果是8.0+,必须用8.x驱动
- 确保数据库服务正常运行,端口、用户名密码无误(你已确认此项,可跳过)
内容的提问来源于stack exchange,提问作者GROOKEY
相关产品推荐
相关产品推荐

