java连接到mysql数据库引发错误(通信链路故障)

java连接到mysql数据库引发错误(通信链路故障),java,mysql,Java,Mysql,我正在尝试连接到远程MySQL数据库,版本为5.7.1 这是我的密码 import java.sql.*; 公共类mysql{ 公共静态void main(字符串args[]){ 试试{ Class.forName(“com.mysql.jdbc.Driver”); Connection con=DriverManager.getConnection(“jdbc:mysql://server:port/database?useSSL=true“,”用户“,”密码“); 系统输出打印(“连接成功”

我正在尝试连接到远程MySQL数据库,版本为5.7.1

这是我的密码

import java.sql.*;
公共类mysql{
公共静态void main(字符串args[]){
试试{
Class.forName(“com.mysql.jdbc.Driver”);
Connection con=DriverManager.getConnection(“jdbc:mysql://server:port/database?useSSL=true“,”用户“,”密码“);
系统输出打印(“连接成功”);
}catch(异常e){e.printStackTrace();}
} 
我不断地发现这个错误:

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

The last packet successfully received from the server was 1 276 milliseconds ago.  The last packet sent successfully to the server was 1 251 milliseconds ago.
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
    at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:202)
    at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4869)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1656)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1217)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at mysql.main(mysql.java:7)
Caused by: javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
    at java.base/sun.security.ssl.SSLSocketInputRecord.handleUnknownRecord(SSLSocketInputRecord.java:440)
    at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:175)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:110)
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1196)
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1105)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:399)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:371)
    at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:187)
    ... 18 more

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障
从服务器成功接收的最后一个数据包是1276毫秒前的数据包。成功发送到服务器的最后一个数据包是1251毫秒前的数据包。
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
位于java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:403)
位于com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
位于com.mysql.jdbc.ExportControlled.transformsockettosslssocket(ExportControlled.java:202)
位于com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4869)
在com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1656)上
位于com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1217)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:768)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
位于java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:403)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
位于java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
位于java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
位于mysql.main(mysql.java:7)
原因:javax.net.ssl.SSLException:不支持或无法识别的ssl消息
位于java.base/sun.security.ssl.SSLSocketInputRecord.handleunknowRecord(SSLSocketInputRecord.java:440)
位于java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:175)
位于java.base/sun.security.ssl.sslttransport.decode(sslttransport.java:110)
位于java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1196)
位于java.base/sun.security.ssl.SSLSocketImpl.ReadHandshakerRecord(SSLSocketImpl.java:1105)
位于java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:399)
位于java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:371)
位于com.mysql.jdbc.ExportControlled.transformsockettosslssocket(ExportControlled.java:187)
…还有18个
当我尝试通过MySQL Workbench连接到我的数据库时,它工作正常。所以我不知道为什么它不工作,我在连接MySQL Workbench时也使用SSL。我使用的是MySQL-connector-java-5.1.49。我该如何解决这个问题?


您必须为用户启用全局访问。

看起来像是因为您的数据库服务器无法访问(可能未启动?)。看看这个答案:这回答了你的问题吗?@LeTex这是一个不同的问题。这里的问题是SSL握手。当你使用
-Djavax.net.debug=SSL:handshake:verbose
运行应用程序时,输出是什么?另请参阅,我仍然得到相同的错误