我的连接到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;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这是一个包装的异常,并不是很有趣。这是异常的根本原因,实际上可以告诉我们一些有关根本原因的信息。请在堆栈跟踪中再看一些。您将面临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