• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pierwsze połączenie i wyświetlenie danych bazy- masa błędów

0 głosów
140 wizyt
pytanie zadane 5 lipca 2018 w Java przez must Bywalec (2,980 p.)

Cześć. Tak jak w temacie postanowiłem postawić pierwsze kroki z bazami danych. 

Korzystam z tego tutoriala: https://www.youtube.com/watch?v=2i4t-SL1VsU&index=2&list=PLEAQNNR8IlB4R7NfqBY1frapYo97L6fOQ

Mój kod wygląda tak:

package jdbcdemo;

import java.sql.*;

public class Main {

    public static void main(String[] args) throws SQLException {
        Connection myConn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/piotri?useSSL=true", "..", "...");
        Statement myStmt = myConn.createStatement();
        ResultSet myRs = myStmt.executeQuery("select * from imiona");
        while (myRs.next()) {
            System.out.println("first name:" + myRs.getString("imie"));
        }
    }
}

(Tam gdzie kropki to jest login oraz hasło)

Stworzyłem w bazie danych o nazwie piotri tableki z imionami, które zawierają imie

Mimo, że robie tak jak na filmiku wywala mi dosłownie masę błędów. Posiadam jdbc 8.0.11.

Exception in thread "main" com.mysql.cj.jdbc.exceptions.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.
	at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:172)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
	at jdbcdemo.Main.main(Main.java:8)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: 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.
	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:488)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:103)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:149)
	at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:165)
	at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:355)
	at com.mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:789)
	at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:499)
	at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:217)
	at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1411)
	at com.mysql.cj.NativeSession.connect(NativeSession.java:165)
	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:982)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852)
	... 6 more
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
	at java.base/sun.security.ssl.Alerts.getSSLException(Alerts.java:198)
	at java.base/sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1969)
	at java.base/sun.security.ssl.Handshaker.fatalSE(Handshaker.java:318)
	at java.base/sun.security.ssl.Handshaker.fatalSE(Handshaker.java:312)
	at java.base/sun.security.ssl.ClientHandshaker.checkServerCerts(ClientHandshaker.java:1846)
	at java.base/sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1655)
	at java.base/sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:260)
	at java.base/sun.security.ssl.Handshaker.processLoop(Handshaker.java:1086)
	at java.base/sun.security.ssl.Handshaker.processRecord(Handshaker.java:1020)
	at java.base/sun.security.ssl.SSLSocketImpl.processInputRecord(SSLSocketImpl.java:1137)
	at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1074)
	at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
	at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1429)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
	at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:213)
	at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:206)
	at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99)
	at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:350)
	... 13 more
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
	at com.mysql.cj.protocol.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:280)
	at java.base/sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1381)
	at java.base/sun.security.ssl.ClientHandshaker.checkServerCerts(ClientHandshaker.java:1825)
	... 27 more
Caused by: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
	at java.base/sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:153)
	at java.base/sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:79)
	at java.base/java.security.cert.CertPathValidator.validate(CertPathValidator.java:309)
	at com.mysql.cj.protocol.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:273)
	... 29 more

Nie wiem co mam kompletnie zrobić. Wpisuje te błedy, zamieniam pierwsza linijke, to wywala kolejne....

2 odpowiedzi

0 głosów
odpowiedź 5 lipca 2018 przez RafalS VIP (122,860 p.)
Ja bym zaczał do wygooglowania błędu :D Technologia jest na tyle popularna, że na pewno ktoś już napotkał identyczny problem:

https://stackoverflow.com/questions/2983248/com-mysql-jdbc-exceptions-jdbc4-communicationsexception-communications-link-fai
komentarz 5 lipca 2018 przez RafalS VIP (122,860 p.)
useSSL=true

Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors

 spróbuj wywalić ten parametr :P

komentarz 5 lipca 2018 przez must Bywalec (2,980 p.)

to jest koniecznie, bo wywala wtedy: 

Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

 

0 głosów
odpowiedź 6 lipca 2018 przez must Bywalec (2,980 p.)

Pozmieniałem trochę i działa.... Ale wywala jeszcze jeden bład, nie wiem właśnie czy jest ważny, bo działa bez tego.

Oto jak wygląda:

package jdbcdemo;

import java.sql.*;
import java.util.TimeZone;

public class Main {

    public static void main(String[] args) throws SQLException {
        Connection myConn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + ":3306/" + "piotri" + "?autoReconnect=true&serverTimezone=" + TimeZone.getDefault().getID(), "...", "...");
        Statement myStmt = myConn.createStatement();
        ResultSet myRs = myStmt.executeQuery("select * from imiona");
        while (myRs.next()) {
            System.out.println("first name: " + myRs.getString("imie"));
        }
    }
}

Konsola:

Fri Jul 06 11:06:16 CEST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
first name: Piotri
first name: Barti

I teraz właśnie, to jest ten błąd o którym pisałem @RafalS . 

Żeby to zniknęło potrzebne jest 

?useSSL=true

ale nie wiem jak to mam tam dopisać. 

Ktoś wie?

Podobne pytania

0 głosów
0 odpowiedzi 47 wizyt
pytanie zadane 20 lutego 2016 w Java przez Sinnko Nowicjusz (140 p.)
0 głosów
1 odpowiedź 81 wizyt
pytanie zadane 8 września 2018 w Java przez NyguseK Użytkownik (650 p.)
0 głosów
1 odpowiedź 87 wizyt
pytanie zadane 16 listopada 2017 w Java przez cyberDEV Użytkownik (790 p.)

86,526 zapytań

135,279 odpowiedzi

300,596 komentarzy

57,276 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...