开发者社区 问答 正文

com.mysql.jdbc.exceptions.jdbc4.CommunicationsExce

我的连接到MySQL数据库的程序运行正常。然后,在不更改用于建立连接的任何代码的情况下,我得到了以下异常:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 发生了什么?

用于获取连接的代码:

private static Connection getDBConnection() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException { String username = "user"; String password = "pass"; String url = "jdbc:mysql://www.domain.com:3306/dbName?connectTimeout=3000";

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
return conn;

}

展开
收起
保持可爱mmm 2020-05-11 16:41:56 663 分享 版权
1 条回答
写回答
取消 提交回答
  • 这是一个包装的异常,并不是很有趣。这是异常的根本原因,实际上可以告诉我们一些有关根本原因的信息。请在堆栈跟踪中再看一些。您将面临SQLException: Connection refused或的机会很大SQLException: Connection timed out。

    如果您的情况也是如此,那么所有可能的原因是:

    JDBC URL中的IP地址或主机名错误。 本地DNS服务器无法识别JDBC URL中的主机名。 JDBC URL中的端口号丢失或错误。 数据库服务器已关闭。 DB服务器不接受TCP / IP连接。 Java和DB之间的某种事物正在阻止连接,例如防火墙或代理。 要解决一个或两个问题,请遵循以下建议:

    使用验证并测试它们ping。 刷新DNS或在JDBC URL中使用IP地址。 验证基于my.cnfMySQL DB。 启动它。 验证是否在没有--skip-networking选项的情况下启动了mysqld 。 禁用防火墙和/或配置防火墙/代理以允许/转发端口。 顺便说一句(与实际问题无关),您不必每次 getConnection()调用都加载JDBC驱动程序。在启动期间仅一次就足够了。来源:stack overflow

    2020-05-11 16:42:07
    赞同 展开评论