Ich bin neu in Datenbanken und habe gerade angefangen, sie zu lernen. Ich habe MySQL Server 8.0., Workbench 8.0, Java Connector 5.1.31, Java 1.8 selbst. Befolgte mehrere Anleitungen für Neulinge, wie man damit beginnt.
Es gibt also den Fall. Ich habe eine Datenbank auf localhost und verbinde mich erfolgreich mit Workbench und über die Windows-Eingabeaufforderung. Aber nachdem ich Code in Java ausgeführt habe:
Driver sqlDriver = new FabricMySQLDriver();
DriverManager.registerDriver(sqlDriver);
Connection sqlConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/?user=root", "root", "root");
Ich bekomme eine Ausnahme com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
Warum konnte es passieren? Ich habe versucht, MySQL neu zu installieren, OS-Variablen bereinigt, überall gesucht und keine Lösung gefunden. Würde mich freuen, hier fündig zu werden.
AKTUALISIERT:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.Util.getInstance(Util.java:383)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1023)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2407)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2328)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.company.Main.main(Main.java:11)
Caused by: java.lang.NullPointerException
at com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3309)
at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1985)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1911)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1288)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2508)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2346)
... 13 more
hast du dir stackoverflow.com/questions/2297356/… angesehen
– AbtPst
4. Mai 2018 um 15:11 Uhr
Bitte posten Sie den vollständigen Ausnahme-Stacktrace, er enthält weitere Informationen, um die zugrunde liegende Ursache zu ermitteln. Auf jeden Fall ist MySQL Connector/J ziemlich alt, vielleicht möchten Sie eine neuere Version wie 5.1.46 oder 8.0.11 ausprobieren. Beachten Sie auch, dass Sie wahrscheinlich nicht verwenden sollten
FabricMySQLDriver
geschweige denn selbst registrieren.– Mark Rotteveel
4. Mai 2018 um 15:32 Uhr
@MarkRotteveel Danke. Versuchte Connector-Version 5.1.46 und es funktioniert. Aktualisierte Kopfnachricht mit vollständigem Stacktrace, den ich zuvor hatte
– Alexey Bugerya
5. Mai 2018 um 5:34 Uhr
@MarkRotteveel Und warum sollte ich FabricMySQLDriver nicht verwenden? Ist es falsch oder nur überflüssig?
– Alexey Bugerya
5. Mai 2018 um 6:13 Uhr
Der Fabric-Treiber ist für hochverfügbare MySQL-Bereitstellungen vorgesehen, die Sie meiner Meinung nach nicht verwenden. Darüber hinaus ist eine bestimmte JDBC-URL erforderlich (fabric würde erfordern
jdbc:mysql:fabric:
als Präfix), also verwenden Sie im Moment nur den automatisch geladenen normalen Treiber.– Mark Rotteveel
5. Mai 2018 um 7:15 Uhr