com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Awaria łącza komunikacyjnego

225

Pracuję nad tym, aby moja baza danych komunikowała się z moimi programami Java.

Czy ktoś może mi dać szybki i brudny program przykładowy za pomocą JDBC?

Dostaję dość głupi błąd:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.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 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at SqlTest.main(SqlTest.java:22)
Caused by: com.mysql.jdbc.exceptions.jdbc4.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 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
    ... 12 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
    ... 13 more

Zawartość pliku testowego:

import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlTest {

    public static void main(String [] args) throws Exception {
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    }
}
Josh K.
źródło
17
Byłem głupi. Serwer MySQL nie został uruchomiony :( Udało się po uruchomieniu.
akfaisel

Odpowiedzi:

251

Więc masz

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Błąd łącza komunikacyjnego
java.net.ConnectException: Odmowa połączenia

Cytuję z tej odpowiedzi, która zawiera także samouczek MySQL + JDBC:

Jeśli masz SQLException: Connection refusedlub Connection timed outlub konkretnego MySQL CommunicationsException: Communications link failure, to oznacza to, że DB nie jest osiągalny w ogóle. Może to mieć jedną lub więcej z następujących przyczyn:

  1. Adres IP lub nazwa hosta w adresie URL JDBC jest niepoprawna.
  2. Nazwa hosta w adresie URL JDBC nie jest rozpoznawana przez lokalny serwer DNS.
  3. Brak numeru portu lub jest on niepoprawny w adresie URL JDBC.
  4. Serwer DB jest wyłączony.
  5. Serwer DB nie akceptuje połączeń TCP / IP.
  6. W serwerze DB zabrakło połączeń.
  7. Coś pomiędzy Javą a DB blokuje połączenia, np. Firewall lub proxy.

Aby rozwiązać jedno lub drugie, postępuj zgodnie z następującymi wskazówkami:

  1. Sprawdź i przetestuj je ping.
  2. Odśwież DNS lub użyj adresu IP w adresie URL JDBC.
  3. Sprawdź to na podstawie my.cnfMySQL DB.
  4. Uruchom DB.
  5. Sprawdź, czy mysqld jest uruchamiany bez --skip-networking option.
  6. Uruchom ponownie bazę danych i popraw odpowiednio kod, aby zamykał połączenia finally.
  7. Wyłącz zaporę i / lub skonfiguruj zaporę / serwer proxy, aby zezwolić / przekierować port.

Zobacz też:

BalusC
źródło
4
MAMP / MAMP Pro domyślnie ustawia MAMP_skip-networking_MAMP. Musisz wyłączyć tę linię w swoim my.cfn
Jurik,
6
Nie w tym przypadku, ale awaria łącza komunikacyjnego występuje również, gdy używasz puli połączeń, a połączenia są zamykane z powodu przedłużającej się bezczynności. Tylko w tym przypadku jest napisane: „Ostatni pakiet otrzymał kilka„ X ”sekund temu”
nikel
@nikel Czy wątki w puli połączeń nie powinny być aktywne przez uruchomienie zapytania sprawdzającego „select 1”? Dlaczego mieliby się zamykać z powodu przedłużającej się bezczynności, skoro ustawiliśmy eksmitora do działania w krótszych odstępach czasu niż limit czasu serwera mysql?
Farhad,
Tak, zapytanie sprawdzające poprawiłoby to. Chodzi mi o przypadek, gdy nie jest ustawiony, a połączenia w puli są przekroczone z powodu braku aktywności
Nikel
Czasami brakuje portu w ciągu połączenia, a sterownik spróbuje połączyć się z domyślnym portem 3306 mysql i zawiedzie, jeśli mysql nie działa na tym porcie. To był mój problem, więc powinienem wspomnieć na wypadek, gdyby ktoś uznał to za przydatne.
Abdul Mannan
10

Łapię ten wyjątek, gdy Java jest poza stertą. Jeśli spróbuję umieścić w pamięci RAM wiele elementów danych - najpierw łapię „ Awaria łącza komunikacyjnego ”, a następnie „ OutOfMemoryError ”.

Zalogowałem to i zmniejszam zużycie pamięci (usuwam 1/2 danych) i wszystko w porządku.

użytkownik1694306
źródło
9

W moim przypadku musiałem zastąpić Localhost rzeczywistym adresem IP serwera bazy danych

Zamiast

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

potrzebowałem

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");
sureshAngamuthu
źródło
W najnowszej aktualizacji 4/5/18: Obecnie używam MySQL Workbench 6.3. Przyszedłem tutaj, aby sprawdzić rozwiązanie, ale znalazłem je sam, po prostu twój serwer MySQL nie działa lub jest zatrzymany. Zrestartowałem mój serwer, działał jak urok.
Abhishek Ekaanth
7
To jest „najlepsze rozwiązanie” dlaczego? Jaki problem rozwiązuje i jak?
Markiz Lorne
to rozwiązanie nie może generować ramek danych
Alan
8

Ten com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionwyjątek występuje, jeśli połączenie z bazą danych jest bezczynne przez długi czas.

To bezczynne połączenie zwraca wartość true, connection.isClosed();ale jeśli spróbujemy wykonać instrukcję, uruchomi ten wyjątek, więc zasugeruję skorzystanie z puli bazy danych.

Yogesh Funde
źródło
2
Dzieje się tak również z innych powodów, takich jak „odmowa połączenia”.
Markiz Lorne
6

Mam ten sam problem od wielu godzin. Używam serwera MAMP

Zamiast używać localhost: [Port Apache], użyj portu MySQL.

Poniżej znajduje się domyślny port MySQL dla serwera MAMP.

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
Abdul Rahim Mohamad
źródło
jeśli masz mampa przed zainstalowaniem MySQL, wypróbuj tę metodę
DAVIS BENNY 15MIS0426,
5

Być może szczekam tutaj niewłaściwe drzewo, ale twój wyjątek wydaje się wskazywać, że twój serwer MySQL jest niedostępny.

Wyjątek w wątku „main” com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Błąd łącza komunikacyjnego Ostatni pakiet wysłany pomyślnie na serwer był 0 milisekund temu. Sterownik nie otrzymał żadnych pakietów z serwera. w...

Co się stanie, jeśli spróbujesz (z terminala)

mysql -u username -p

Zostaniesz poproszony o podanie hasła związanego z nazwą użytkownika. Czy po podaniu prawidłowego hasła klient mysql łączy się?

Może być konieczne uruchomienie MySQL z Preferencji, jeśli nie. Możesz także ustawić, aby działał podczas uruchamiania.

Karl Walsh
źródło
1
Używam MAMP do uruchomienia mojego serwera MySQL. Czy to byłby problem?
Josh K
Kiedy łączę się (przez Sequal Pro) z moim komputerem localhost, używam poprawnej nazwy użytkownika / hasła i działa dobrze.
Josh K
5

W moim przypadku okazało się, że wersja mysql-connector-javabyła za stara.

W mojej wersji demonstracyjnej używam w mysql-connector-javaten sposób:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

Ale w środowisku programistycznym używam tego:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

Moja wersja MySQL to 5.1.48 (tak, jest stara, tylko naśladując wersję produktu). Więc spotkałem ten sam błąd.

Ponieważ znaleziono przyczynę, znaleziono również rozwiązanie. Dopasuj wersję!

shellbye
źródło
4
Mało prawdopodobne. Wszystkie te wersje sterowników powinny być kompatybilne wstecz.
Markiz Lorne
1
Wydaje się, że ten problem został rozwiązany w nowych złączach mysql, patrz stackoverflow.com/questions/14559794/...
Nishi
Ta sama sprawa dla mnie. Wersja sterownika jest dla MySQL 5, a wersja serwera to 8. Zaktualizowałem więc wersję jar i problem został rozwiązany.
edenPan
4

Wystąpił ten sam błąd, ponieważ próbowałem uruchomić program bez uruchamiania serwera mysql.

Po uruchomieniu serwera mysql wszystko poszło dobrze.

rs2012
źródło
4

Wcześniejsze odpowiedzi są odpowiednie. Chciałbym jednak zwrócić uwagę na bardziej ogólny problem.

Napotkałem podobny problem, a przyczyną było ograniczenie sieci mojej firmy.

To samo połączenie było udane, gdy byłem w innej sieci.

użytkownik3251882
źródło
1
Ten wskaźnik rozwiązał mój problem, określając, że „localhost” działa, kiedy łączę się z VPN, ale to samo nie działa, jeśli rozłączam się z VPN, jednak naprawiłem to, zmieniając „localhost” na „127.0.0.1”
gannu_lee
4

Zaktualizuj swój adres IP w pliku /etc/mysql/my.cnf

bind-address  = 0.0.0.0

Uruchom ponownie usługi deamon i mysql mysql.

Sreedhar GS
źródło
1
Edytowano, aby używać prawidłowego adresu powiązania
OneCricketeer
3

Pobierz MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' z 'mysql-connector-java-5.1.11.zip') z MySQL .

Musisz wprowadzić słoik sterownika podczas kompilacji i środowiska wykonawczego w ścieżce klasy.

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );
układacz
źródło
Nie, burza błędów sprawia, że ​​niczego nie znajduję. Czy można to zaimportować bez pliku JAR?
Josh K
@Josh to działa, naprawdę musisz właściwie ustawić ścieżkę klasy. (Lub skopiuj słoik do katalogu% JAVA_HOME% \ jre \ lib \ ext, ale jest to uważane za złą praktykę)
układarka
3

Ten błąd może również wystąpić, jeśli Java spróbuje połączyć się z MySQL przez SSL, ale coś pójdzie nie tak. (W moim przypadku konfigurowałem pule połączeń Payara Server 5.193.1 z MySQL.)

Niektórzy sugerowali ustawienie useSSL=false. Jednak od wersji Connector / J 8.0.13to ustawienie jest nieaktualne. Oto fragment właściwości konfiguracji MySQL Connector / J 8.0 :

sslMode

Domyślnie połączenia sieciowe są szyfrowane SSL; ta właściwość pozwala wyłączyć bezpieczne połączenia lub wybrać inny poziom bezpieczeństwa. Dozwolone są następujące wartości: DISABLED- Ustanawianie niezaszyfrowanych połączeń; PREFERRED- (domyślnie) Ustanawiaj połączenia szyfrowane, jeśli serwer je włączył, w przeciwnym razie powróć do połączeń nieszyfrowanych; REQUIRED- Nawiąż bezpieczne połączenia, jeśli serwer je włączył, w przeciwnym razie zawiod; VERIFY_CA- Podobnie, REQUIREDale dodatkowo sprawdź certyfikat TLS serwera względem skonfigurowanych certyfikatów urzędu certyfikacji (CA); VERIFY_IDENTITY- Podobnie VERIFY_CA, ale dodatkowo sprawdź, czy certyfikat serwera odpowiada hostowi, z którym próbowane jest połączenie.

Ta nieruchomość zastąpiły wycofywanych właściwości starsze useSSL, requireSSLi verifyServerCertificate, które są nadal akceptowane, ale przekładają się na wartość dla sslModejeśli sslModenie jest wyraźnie określone: useSSL=falsejest tłumaczony sslMode=DISABLED; {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}jest przetłumaczone na sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}jest przetłumaczone na sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}jest przetłumaczone na sslMode=VERIFY_CA. Nie ma równoważnych starszych ustawień dla sslMode=VERIFY_IDENTITY. Zauważ, że dla wersji serwerowych wszystkim domyślnym ustawieniem sslModejest PREFERRED, a to jest równoznaczne z ustawieniami spuścizny useSSL=true, requireSSL=falseiverifyServerCertificate=false, które w niektórych sytuacjach różnią się od ustawień domyślnych dla Connector / J 8.0.12 i wcześniejszych. Aplikacje, które nadal korzystają ze starszych właściwości i korzystają ze swoich starych ustawień domyślnych, powinny zostać przejrzane.

Starsze właściwości są ignorowane, jeśli sslModesą ustawione jawnie. Jeśli żadne ustawienie sslModelub nie useSSLjest ustawione jawnie, sslMode=PREFERREDzastosowanie ma ustawienie domyślne .

Domyślnie :PREFERRED

Od wersji : 8.0.13

W moim przypadku ustawienie sslMode=DISABLEDbyło wszystkim, czego potrzebowałem, aby rozwiązać problem. To było na maszynie testowej. Ale w przypadku produkcji bezpiecznym rozwiązaniem byłoby prawidłowe skonfigurowanie klienta Java i serwera MySQL do korzystania z protokołu SSL.


Zauważ, że wyłączenie SSL może wymagać również ustawienia allowPublicKeyRetrieval=true. (Ponownie, nie jest to mądra decyzja z punktu widzenia bezpieczeństwa). Więcej informacji znajduje się w Opcjach MySQL ConnectionString :

AllowPublicKeyRetrieval

Jeśli konto użytkownika korzysta z sha256_passworduwierzytelniania, hasło musi być chronione podczas transmisji; Preferowanym mechanizmem jest TLS, ale jeśli nie jest dostępny, zostanie użyte szyfrowanie klucza publicznego RSA. Aby określić klucz publiczny RSA serwera, użyj ServerRSAPublicKeyFileustawienia ciągu połączenia lub ustaw, AllowPublicKeyRetrieval=Trueaby umożliwić klientowi automatyczne żądanie klucza publicznego od serwera. Pamiętaj, że AllowPublicKeyRetrieval=Truezłośliwy serwer proxy może wykonać atak MITM w celu uzyskania hasła w postaci zwykłego tekstu, więc domyślnie jest to Fałsz i musi być jawnie włączony.

MS Dousti
źródło
Odpowiedni wątek z Payara Server GitHub .
MS Dousti,
3

Ten sam problem został rozwiązany przez następujące kroki:

  1. Iść do my.cnf

    vi /etc/mysql/my.cnf
  2. Zmodyfikuj jego adres powiązania

    "bind-address = 0.0.0.0"
  3. Uruchom ponownie MySQL

    sudo /etc/init.d/mysql restart
Haimei
źródło
2

Jeśli używasz WAMPlub XAMPserwer, aby zainstalować bazę danych mysql. Następnie musisz jawnie uruchomić mysql, w przeciwnym razie pokaże się com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failurepodczas łączenia z bazą danych

xrcwrn
źródło
2

rozwiązałem ten problem w łatwy sposób, który zadziałał dla mnie. miałem problem z seme „com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Błąd łącza komunikacyjnego”. W moim pliku db.properties miałem to: url: jdbc: mysql: // localhost: 90 / myDB, tylko usunąłem adres URL portu, w ten sposób url: jdbc: mysql: // localhost / myDB i to działało dla mnie .

Dario Castro
źródło
2

Zdarzyło mi się to, kiedy zmieniłem port mysql z 3306 na 3307 w plikach my.ini i php.ini, ale po zmianie portów (3307-> 3306) znów działało dobrze.

MrPencil
źródło
2

Jeśli zmieniłeś port, pojawia się taki błąd „com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Błąd łącza komunikacyjnego” Sprawdź numer portu

Maheshkumar.V
źródło
1

Właśnie tego doświadczyłem.

Musi sprawić, aby działał przez: (można to umieścić w statycznym module inicjującym blok)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

Również poprzez uzyskanie połączenia poprzez:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

zamiast określać parametry logowania

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

Pozdrowienia.

mel3kings
źródło
2
Blok statyczny nie jest konieczny od 2007 roku i możesz podać parametry logowania w obu przypadkach.
Markiz Lorne
1

Spróbuj zmienić localhostna 127.0.0.1.

Host lokalny zostanie rozwiązany ::1. MySQL nie może być domyślnie podłączony przez IPv6.

A oto wynik telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

I nie ma odpowiedzi z serwera MySQL.

Oczywiście, upewnij się, że twój serwer MySQL jest uruchomiony.

Haozhe Xie
źródło
To właściwie problem z plikiem / etc / hosts, a nie Mysql
OneCricketeer
@ cricket_007 Domyślnie localhost jest tłumaczony na :: 1 zamiast 127.0.0.1.
Haozhe Xie
1
Jasne, tylko jeśli włączony jest ipv6 i zależy od pliku hosts
OneCricketeer
1
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321

con = DriverManager.getConnection(dbhost, user, password);

jeśli mysql wersja 8 lub wyższa zaktualizowane przez użytkownika złącze

Ravinath
źródło
to jest prawidłowa odpowiedź, po prostu dodaj useSSL = false do ciągu połączenia, gdy używasz sterownika MySQL 8 lub nowszego.
Mohannd
1

Do zdalnego połączenia z MySQL

  1. Dodaj użytkownika zdalnego do MySQL z np. IP = remoteIP:

    mysql -u xxxx -p //local coonection to mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
    //Query OK, 0 rows affected (xx sec)
    mysql> FLUSH PRIVILEGES;
    //Query OK, 0 rows affected
  2. Zezwalaj na zdalny dostęp do MySQL (domyślnie wszystkie połączenia zewnętrzne nie są dozwolone):

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  bind-address = 0.0.0.0
    Restart Mysql: /etc/init.d/mysql restart
  3. W najnowszej wersji sterownika JDBC sterownik JDBC:

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'
Jugerten
źródło
0

Miałem ten sam problem i oto jak to naprawić:

  1. Mój .jsp wywoływał atrybuty, których jeszcze nie zdefiniowałem w serwletu.
  2. Miałem dwie nazwy kolumn, przez które przechodziłem do obiektu, ResultSet (getString("columnName"))które nie pasowały do ​​nazw kolumn w mojej bazie danych.

Nie jestem pewien, który z nich rozwiązał problem, ale zadziałał. Należy także pamiętać, że tworzenie nowego Statementi ResultSetdla każdego zapytania tabeli.

użytkownik3427633
źródło
1
(1) z pewnością nie powoduje tego problemu.
Markiz Lorne
0

Może to być prosty problem ze słoikiem. być może używasz starego, mysql-connector-java-XXX-bin.jarktóry nie jest obsługiwany przez twoją bieżącą wersję mysql. Użyłem mysql-connector-java-5.1.18-bin.jartak, jak używam mysql 5.5i ten problem został dla mnie rozwiązany.

Ankit Jain
źródło
1
Tak, może istnieć szansa na niedopasowanie słoika.
Kiran Nunna
Wszystkie te wersje sterowników powinny być kompatybilne.
Markiz Lorne
0

Być może nie uruchomiłeś serwera MySQL i Apache. Po uruchomieniu serwera Apache i MySQL z Panelu sterowania XAMPP połączenie zostało nawiązane.

Powodzenia!

Shivam Gupta
źródło
0

Rozwiązaniem dla mnie jest zrobienie 2 rzeczy: 1. Stwórz nowego użytkownika innego niż root za pomocą hasła używając następujących konektorów:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. komentarz linia adresu IP na mysqld.conf

następnie połącz się z nową nazwą użytkownika i hasłem. powinno działać.

Abdul Khalid
źródło
Powtórz to dla wszystkich zdalnych użytkowników lub dodaj symbol wieloznaczny zamiast Localhost
OneCricketeer
0

Próbował połączyć się ze starszą wersją MySQL („wersja”, „5.1.73”); podczas korzystania z nowszej wersji sterownika pojawia się błąd, który mówi o użyciu pliku „com.mysql.cj.jdbc.Driver lub nawet nie musisz określać, którego używasz:

Ładowanie klasy com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver '. Sterownik jest automatycznie rejestrowany za pomocą interfejsu SPI, a ręczne ładowanie klasy sterownika jest zasadniczo niepotrzebne.

Zmieniłem deklarację, aby użyć wersji 5.1.38 mysql-connector-java i, w kodzie, zachowałem com.mysql.jdbc.Driver .

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

Wszystko zaczęło się, kiedy zobaczyłem ankit Jain za odpowiedź

estellezg
źródło
0

Mój firewall blokował post 3307, na którym nasłuchuje MySQL. Więc zmieniłem port z 3307 na 3306, a następnie mogę pomyślnie połączyć się z bazą danych.

Michał Šípek
źródło
0

W moim MacBooku rozwiązałem ten błąd tylko po ponownym zainstalowaniu nowej wersji Eclipse EE i usunięciu lokalnych serwerów, takich jak xamp mysql lub mamp, ale używam tylko jednego z nich ...

m Piroli
źródło
0

W moim przypadku musiałem założyć tunel ssh do zdalnej bazy danych i wszystkie ustawienia były prawidłowe, a testowanie połączenia z PhpStorm również zakończyło się powodzeniem. A także schemat został załadowany, ale nie dane. Zamiast tego dostałem:

[08S01] 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.

Żadna z powyższych sugestii nie zadziałała. Z jakiegokolwiek powodu próbowałem rozwiązać problem, po prostu ponownie uruchamiając PhpStorm i voila zadziałało!

Tech Nomad
źródło
0

Otrzymywałem wiele błędów, takich jak:

  • CommunicationsException: Communications link failure
  • java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at.

Musiałem dodać:

  • W AndroidManifest.xml dołącz <uses-permission android:name="android.permission.INTERNET"/>tuż po otwierającym tekście manifestu.

  • Dodaj sterownik JDBC do swoich zależności Gradle (lub Maven).

Daniel Segura
źródło