【发布时间】:2018-11-30 16:24:58
【问题描述】:
我创建了一个简单的类来测试与我使用 Mysql Workbench 创建的 localhost 数据库的通信。 Mysql 服务器正在运行。 JDBC 驱动程序已添加到我的项目的 Classpath 中。
public class Database
{
public static void main(String[] args)
throws SQLException, ClassNotFoundException
{
Connection connection = null;
String serverName = "localhost:3306";
String databaseName = "detector_tests";
String url = "jdbc:mysql://" + serverName + "/" + databaseName
+ "?useSSL=TRUE";
String username = "simon";
String password = "password123";
connection = DriverManager.getConnection(url, username, password);
}
}
当我运行程序时,我得到以下异常:
线程“main”中的异常 com.mysql.cj.jdbc.exceptions.CommunicationsException:通信 链接失败
最后一个成功发送到服务器的数据包是 0 毫秒 前。驱动程序没有收到来自服务器的任何数据包。在 com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:172) 在 com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) 在 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) 在 com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:444) 在 com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) 在 com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 Database.main(Database.java:17) 原因: com.mysql.cj.exceptions.CJCommunicationsException:通信链接 失败
最后一个成功发送到服务器的数据包是 0 毫秒 前。驱动程序没有收到来自服务器的任何数据包。在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知 来源)在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)在 java.lang.reflect.Constructor.newInstance(未知来源) 在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59) 在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:103) 在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:149) 在 com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:165) 在 com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:355) 在 com.mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:789) 在 com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:499) 在 com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:217) 在 com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1411) 在 com.mysql.cj.NativeSession.connect(NativeSession.java:165) 在 com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:982) 在 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852) ... 6 更多原因:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException:路径不链接 与任何信任锚在 sun.security.ssl.Alerts.getSSLException(未知来源)在 sun.security.ssl.SSLSocketImpl.fatal(未知来源)在 sun.security.ssl.Handshaker.fatalSE(未知来源)在 sun.security.ssl.Handshaker.fatalSE(未知来源)在 sun.security.ssl.ClientHandshaker.serverCertificate(未知来源) 在 sun.security.ssl.ClientHandshaker.processMessage(未知来源) 在 sun.security.ssl.Handshaker.processLoop(未知来源) sun.security.ssl.Handshaker.process_record(未知来源)在 sun.security.ssl.SSLSocketImpl.readRecord(未知来源)在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(未知来源) 在 sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(未知来源)在 com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:213) 在 com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:206) 在 com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99) 在 com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:350) ... 13 更多原因:java.security.cert.CertificateException: java.security.cert.CertPathValidatorException:路径不链接 与任何信任锚在 com.mysql.cj.protocol.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:280) 在 sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(未知 来源)... 25 更多 原因: java.security.cert.CertPathValidatorException:路径不链接 与任何信任锚在 sun.security.provider.certpath.PKIXCertPathValidator.validate(未知 来源)在 sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(未知 来源)在 java.security.cert.CertPathValidator.validate(未知 来源)在 com.mysql.cj.protocol.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:273) ... 26 更多
看来我需要添加某种证书或其他东西。我不确定,因为我对数据库很陌生。有相同经历的人或者解决办法吗?如果您需要更多信息,我很乐意编辑帖子。
提前致谢!
【问题讨论】:
-
"java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: 路径未与任何信任锚链接"
-
什么意思?我需要在我的 Windows 操作系统上配置 Eclipse、数据库或其他东西吗?
-
你试过用谷歌搜索那个错误信息吗?我看到很多帖子和回复...
-
是的,找不到任何有用的东西。