【发布时间】:2021-01-04 09:17:17
【问题描述】:
我正在尝试在我的 Java 程序和 MySQL 服务器 (root, localhost:3306) 之间创建一个连接,如果我从我的主服务器启动连接,它就会工作
Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/", "root" ,"Password.");
但是,当我尝试从我在 Main 中调用的构造函数运行它时
bddFilmoteca newBDD = new bddFilmoteca(); 总是会报错
通讯链接故障。最后一个数据包成功接收 来自服务器的时间是 265 毫秒前。最后发送的数据包 成功到服务器是 259 毫秒前。
构造函数是:
public class bddFilmoteca {
// Attributes for the connection:
private static String URL = "jdbc:mysql://localhost:3306/";
private static String BDD = "Filmoteca";
private static String USER = "root";
private static String PASSWORD = "Password.";
private Connection con; //clase para crear una cadena de conexión al servidor o a la BD concreta
public bddFilmoteca() {
try {
con = DriverManager.getConnection(URL + "?useSSL=true", USER ,PASSWORD);
try {
crearBDD();
} catch (Exception e) {
System.out.println(e.getMessage());
}
} catch (SQLException ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
}
}
堆栈跟踪是:
The last packet successfully received from the server was 265 milliseconds ago. The last packet sent successfully to the server was 259 milliseconds ago.
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
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:64)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
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 bddFilmoteca.<init>(bddFilmoteca.java:16)
at mainFilmoteca.main(mainFilmoteca.java:16)
【问题讨论】:
-
您使用的是哪个版本的 MySQL 服务器以及哪个版本的 MySQL Connector/J?顺便说一句:如果它以
"jdbc:mysql://localhost:3306/"成功,但以"jdbc:mysql://localhost:3306/?useSSL=true"失败,那么这应该是首先要检查的事情。该问题与在构造函数或其他地方被调用无关。 -
试试
URL + BDD + "?useSSL=true"。您可以使用单独的数据库工具来检查所有内容。
标签: java mysql jdbc constructor