• 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

Object Storage Arubacloud
0 głosów
236 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,820 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,820 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 85 wizyt
pytanie zadane 20 lutego 2016 w Java przez Sinnko Nowicjusz (140 p.)
0 głosów
1 odpowiedź 144 wizyt
pytanie zadane 8 września 2018 w Java przez NyguseK Użytkownik (650 p.)
0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 16 listopada 2017 w Java przez cyberDEV Użytkownik (780 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...