com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: errore del collegamento di comunicazione


226

Sto lavorando per far parlare il mio database con i miei programmi Java.

Qualcuno può darmi un programma di esempio rapido e sporco usando JDBC?

Ricevo un errore piuttosto stupendo:

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

Contenuto del file di prova:

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?");
    }
}

17
Ero uno stupido. Il server MySQL non è stato avviato :( dopo l'avvio è stato eseguito correttamente.
Akfaisel

Risposte:


252

Quindi, hai un

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: errore del collegamento di comunicazione
java.net.ConnectException: connessione rifiutata

Sto citando questa risposta che contiene anche un tutorial passo-passo su MySQL + JDBC:

Se ottieni uno SQLException: Connection refusedo Connection timed outuno specifico di MySQL CommunicationsException: Communications link failure, significa che il DB non è affatto raggiungibile. Ciò può avere una o più delle seguenti cause:

  1. L'indirizzo IP o il nome host nell'URL JDBC è errato.
  2. Il nome host nell'URL JDBC non è riconosciuto dal server DNS locale.
  3. Numero porta mancante o errato nell'URL JDBC.
  4. Il server DB non è attivo.
  5. Il server DB non accetta connessioni TCP / IP.
  6. Il server DB ha esaurito le connessioni.
  7. Qualcosa tra Java e DB sta bloccando le connessioni, ad esempio un firewall o un proxy.

Per risolvere l'uno o l'altro, seguire i seguenti consigli:

  1. Verificare e testarli con ping.
  2. Aggiorna DNS o utilizza invece l'indirizzo IP nell'URL JDBC.
  3. Verificare sulla base my.cnfdi MySQL DB.
  4. Avviare il DB.
  5. Verifica se mysqld è avviato senza --skip-networking option.
  6. Riavviare il DB e correggere il codice di conseguenza in cui chiude le connessioni finally.
  7. Disabilita il firewall e / o configura il firewall / proxy per consentire / inoltrare la porta.

Guarda anche:


4
MAMP / MAMP Pro imposta MAMP_skip-networking_MAMP per impostazione predefinita. Devi disabilitare questa riga nel tuo my.cfn
Jurik

6
Non in questo caso, ma si verifica un errore del collegamento di comunicazione anche quando si utilizza un pool di connessioni e le connessioni vengono chiuse a causa di inattività prolungata. Solo in quel caso, dice "L'ultimo pacchetto è stato ricevuto alcuni" X "secondi fa"
nikel

@nikel I thread nel pool di connessioni non devono essere mantenuti attivi attivando la query di convalida "select 1"? Perché dovrebbero chiudersi per inattività prolungata quando abbiamo impostato il programma di eliminazione per l'esecuzione a intervalli di tempo più brevi rispetto al timeout del server mysql?
Farhad,

Sì, una query di convalida risolverebbe questo problema. Il mio punto riguardava il caso in cui non è impostato e le connessioni nel pool vengono scadute a causa dell'inattività
nikel

A volte manca la porta dalla stringa di connessione e il driver tenterà di connettersi alla porta mysql 3306 predefinita e fallirà se mysql non è in esecuzione su questa porta. Era il mio problema, quindi dovrei menzionarlo nel caso in cui qualcun altro lo ritenga utile.
Abdul Mannan,

10

Prendo questa eccezione quando Java fuori dal mucchio. Se provo a inserire nella RAM molti elementi di dati, prima vedo " Errore collegamento comunicazione " e poi " OutOfMemoryError ".

L'ho registrato e diminuisco il consumo di memoria (elimina 1/2 dati) e tutto ok.


9

Nel mio caso, dovevo fare una sostituzione di Localhost con l'indirizzo IP effettivo del server di database

Invece di

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

avevo bisogno

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

Sull'ultimo aggiornamento del 4/5/18: attualmente sto usando MySQL Workbench 6.3. Sono venuto qui per verificare la soluzione ma l'ho trovata da solo, è solo che il tuo server MySQL non è in esecuzione o è stato arrestato. Ho riavviato il mio server ha funzionato come un fascino.
Abhishek Ekaanth,

7
Questa è la "soluzione migliore" perché? Quale problema risolve e come?
Marchese di Lorne,

questa soluzione non può generare frame di dati
Alan

8

Questa com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptioneccezione si verifica se la connessione al database è inattiva per lungo tempo.

Questa connessione inattiva ritorna attiva, connection.isClosed();ma se proviamo a eseguire l'istruzione genererà questa eccezione, quindi suggerirò di utilizzare il pool di database.


2
Si verifica anche per altri motivi come "connessione rifiutata".
Marchese di Lorne,

6

Ho avuto lo stesso problema per ore. Sto usando MAMP Server

Invece di usare localhost: [Porta Apache], usa la tua porta MySQL.

Di seguito è riportata la porta MySQL predefinita per il server MAMP.

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

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);

se hai mamp prima di installare Mysql, prova questo metodo
DAVIS BENNY 15MIS0426

5

Potrei abbaiare qui l'albero sbagliato, ma la tua eccezione sembra indicare che il tuo server MySQL non è disponibile.

Eccezione nel thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: errore del collegamento di comunicazione L'ultimo pacchetto inviato correttamente al server è stato 0 millisecondi fa. Il driver non ha ricevuto alcun pacchetto dal server. a...

Cosa succede se ci provi (dal terminale)

mysql -u username -p

Ti verrà richiesta la password associata al nome utente. Dopo aver fornito la password corretta, il client mysql si connette?

In caso contrario, potrebbe essere necessario avviare MySQL dalle Preferenze. Puoi anche impostarlo per l'esecuzione all'avvio.


1
Sto usando MAMP per eseguire il mio server MySQL. Sarebbe un problema?
Josh K,

Quando mi collego (tramite Sequal Pro) al mio localhostutilizzo il nome utente / password corretti e funziona benissimo.
Josh K,

5

Nel mio caso, risulta che la versione di mysql-connector-javaera troppo vecchia.

Nella mia demo, in qualche modo uso in mysql-connector-javaquesto modo:

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

Ma nell'ambiente di sviluppo, uso questo:

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

E la mia versione di MySQL era la 5.1.48 (sì, è vecchia, solo per imitare la versione del prodotto). Quindi ho riscontrato lo stesso errore.

Poiché il motivo è stato trovato, anche la soluzione è stata trovata. Abbina la versione!


4
Improbabile. Tutte queste versioni di driver dovrebbero essere compatibili con le versioni precedenti.
Marchese di Lorne,

1
Questo problema sembra essere stato risolto nei nuovi connettori mysql, vedi stackoverflow.com/questions/14559794/…
Nishi

Lo stesso caso per me. La versione del driver è per MySQL 5 mentre la versione del server è 8. Quindi ho aggiornato la versione del vaso e il problema è stato risolto.
edenPan

4

Ho avuto lo stesso errore perché stavo cercando di eseguire il mio programma senza avviare il server mysql.

Dopo aver avviato il server mysql, è andato tutto bene.


4

Le risposte precedenti sono appropriate. Ma vorrei anche indicare un problema più generico.

Ho affrontato un problema simile e il motivo era una restrizione di rete della mia azienda.

La stessa connessione stava avendo successo quando ero in qualsiasi altra rete.


1
Questo puntatore ha risolto il mio problema, specificando che 'localhost' funzionava quando mi collegavo a VPN, ma lo stesso non funzionava se mi disconnettevo da VPN, tuttavia ho risolto il problema cambiando 'localhost' in '127.0.0.1'
gannu_lee

4

Aggiorna il tuo indirizzo IP nel file /etc/mysql/my.cnf

bind-address  = 0.0.0.0

Riavvia i servizi mysql deamon e mysql.


1
Modificato per utilizzare un indirizzo di bind valido
OneCricketeer

3

Scarica MySQL-JDBC-Type-4-Treiber (ig 'mysql-connettore-java-5.1.11-bin.jar' da 'mysql-connector-java-5.1.11.zip') da Mysql .

Devi inserire il jar del driver durante la compilazione e il runtime nel tuo percorso di classe.

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" );

No, mi dà una tempesta di errori nel non trovare nulla. Sarebbe possibile importarlo senza il file JAR?
Josh K,

@Josh funziona, devi solo impostare correttamente il tuo percorso di classe. (O copia il vaso nella directory% JAVA_HOME% \ jre \ lib \ ext, ma questa è considerata una cattiva pratica)
stacker

3

Questo errore può verificarsi anche se Java tenta di connettersi a MySQL su SSL, ma qualcosa va storto. (Nel mio caso, stavo configurando i pool di connessioni Payara Server 5.193.1 su MySQL.)

Alcune persone hanno suggerito l'impostazione useSSL=false. Tuttavia, dalla versione di Connector / J 8.0.13, tale impostazione è obsoleta. Ecco un estratto dalle proprietà di configurazione di MySQL Connector / J 8.0 :

sslMode

Per impostazione predefinita, le connessioni di rete sono crittografate SSL; questa proprietà consente di disattivare le connessioni sicure o di scegliere diversi livelli di sicurezza. Sono consentiti i seguenti valori: DISABLED- Stabilire connessioni non crittografate; PREFERRED- (impostazione predefinita) Stabilire connessioni crittografate se il server le ha abilitate, altrimenti ricorrere a connessioni non crittografate; REQUIRED- Stabilire connessioni sicure se il server le ha abilitate, altrimenti fallire; VERIFY_CA- Come REQUIREDma verificare ulteriormente il certificato TLS del server rispetto ai certificati dell'autorità di certificazione (CA) configurata; VERIFY_IDENTITY- Mi piace VERIFY_CA, ma verifica inoltre che il certificato del server corrisponda all'host a cui viene tentata la connessione.

Questa struttura ha sostituito le proprietà ritirate legacy useSSL, requireSSLe verifyServerCertificate, che sono ancora accettate ma traducono in un valore per sslModese sslModenon è impostato in modo esplicito: useSSL=falseè tradotto in sslMode=DISABLED; {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}è tradotto in sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}è tradotto in sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}è tradotto in sslMode=VERIFY_CA. Non ci sono impostazioni legacy equivalenti per sslMode=VERIFY_IDENTITY. Si noti che, per le versioni server di tutto, l'impostazione predefinita di sslModeè PREFERRED, ed è equivalente alle impostazioni precedenti di useSSL=true, requireSSL=falseeverifyServerCertificate=false, che differiscono dalle loro impostazioni predefinite per Connector / J 8.0.12 e precedenti in alcune situazioni. Le applicazioni che continuano a utilizzare le proprietà legacy e si basano sulle loro vecchie impostazioni predefinite dovrebbero essere riviste.

Le proprietà legacy vengono ignorate se sslModeimpostate in modo esplicito. Se nessuna sslModeo useSSLè impostata esplicitamente, si sslMode=PREFERREDapplica l'impostazione predefinita di .

Predefinito :PREFERRED

Dalla versione : 8.0.13

Quindi, nel mio caso, l'impostazione sslMode=DISABLEDera tutto ciò di cui avevo bisogno per risolvere il problema. Questo era su una macchina di prova. Ma per la produzione, la soluzione sicura sarebbe configurare correttamente il client Java e il server MySQL per utilizzare SSL.


Si noti che disabilitando SSL, potrebbe essere necessario impostare anche allowPublicKeyRetrieval=true. (Ancora una volta, non una decisione saggia dal punto di vista della sicurezza). Ulteriori informazioni sono disponibili nelle opzioni di MySQL ConnectionString :

AllowPublicKeyRetrieval

Se l'account utente utilizza l' sha256_passwordautenticazione, la password deve essere protetta durante la trasmissione; TLS è il meccanismo preferito per questo, ma se non è disponibile verrà utilizzata la crittografia della chiave pubblica RSA. Per specificare la chiave pubblica RSA del server, utilizzare l' ServerRSAPublicKeyFileimpostazione della stringa di connessione o impostare AllowPublicKeyRetrieval=Trueper consentire al client di richiedere automaticamente la chiave pubblica dal server. Si noti che AllowPublicKeyRetrieval=Truepotrebbe consentire a un proxy dannoso di eseguire un attacco MITM per ottenere la password in chiaro, quindi è False per impostazione predefinita e deve essere esplicitamente abilitato.



3

Il mio stesso problema è risolto dai seguenti passaggi:

  1. Vai a my.cnf

    vi /etc/mysql/my.cnf
  2. Modifica il suo indirizzo di bind

    "bind-address = 0.0.0.0"
  3. Riavvia MySQL

    sudo /etc/init.d/mysql restart

2

Se si utilizza WAMPo il XAMPserver per installare il database mysql. Quindi devi avviare esplicitamente mysql sever altro saggio che mostrerà com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failuredurante la connessione con il database


2

ho risolto questo problema in modo semplice, ha funzionato per me. ho avuto il problema seme "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: errore del collegamento di comunicazione". Nel mio file db.properties avevo questo: url: jdbc: mysql: // localhost: 90 / myDB, ho rimosso solo l'URL della porta, risultando in questo modo url: jdbc: mysql: // localhost / myDB e ha funzionato per me .


2

Questo è successo a me quando ho cambiato la porta mysql da 3306 a 3307 nei file my.ini e php.ini ma dopo aver cambiato le porte (3307-> 3306) ha funzionato di nuovo.


2

Se hai cambiato la tua porta, ricevi questo tipo di errore "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: errore del collegamento di comunicazione" Controlla il tuo numero di porta


1

Ho appena provato questo.

Devo farlo funzionare: (questo può essere inserito nell'inizializzatore di blocchi statici)

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

Anche ottenendo la connessione tramite:

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

invece di specificare i parametri di accesso

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

Saluti.


2
Il blocco statico non è più necessario dal 2007 ed è possibile specificare i parametri di accesso in entrambi i modi.
Marchese di Lorne,

1

Prova a passare localhosta 127.0.0.1.

L'host locale verrà risolto ::1. E MySQL non può essere collegato tramite IPv6 per impostazione predefinita.

Ed ecco l'output di telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

E non c'è risposta dal server MySQL.

Naturalmente, assicurati che il tuo server MySQL sia in esecuzione.


Questo è in realtà un problema con il tuo file / etc / hosts, non con Mysql
OneCricketeer

@ cricket_007 Per impostazione predefinita, localhost è risolto in :: 1 invece di 127.0.0.1.
Haozhe Xie,

1
Certo, solo se ipv6 è abilitato e in base al file 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);

se il connettore mysql versione 8 o successiva è stato aggiornato dall'utente


questa è la risposta giusta basta aggiungere useSSL = false alla stringa di connessione quando si utilizza il driver MySQL 8 o superiore.
Mohannd,

1

Per la chiamata remota a Mysql

  1. Aggiungi l'utente remoto a Mysql da per esempio 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. Consenti accesso remoto a Mysql (per impostazione predefinita non sono consentite tutte le chiamate esterne):

    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. Per l'ultima versione del driver JDBC, il 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'

0

Ho avuto lo stesso problema, ed ecco come è stato risolto:

  1. Il mio .jsp stava chiamando attributi che non avevo ancora definito nel servlet.
  2. Avevo due nomi di colonna che stavo passando in un oggetto ResultSet (getString("columnName"))che non corrispondevano ai nomi di colonna nel mio database.

Non sono sicuro di quale abbia risolto il problema, ma ha funzionato. Inoltre, assicurarsi che si crea un nuovo Statemente ResultSetper ogni query tavolo.


1
(1) certamente non causa questo problema.
Marchese di Lorne,

0

Potrebbe essere un semplice problema di vaso. è possibile che tu stia utilizzando un vecchio mysql-connector-java-XXX-bin.jarche non è supportato dalla tua attuale versione di mysql. ho usato mysql-connector-java-5.1.18-bin.jarcome sto usando mysql 5.5e questo problema è stato risolto per me.


1
Sì, può esserci la possibilità che il vaso non corrisponda.
Kiran Nunna,

Tutte queste versioni di driver dovrebbero essere compatibili.
Marchese di Lorne,

0

Forse non hai avviato Mysql e Apache Server. Dopo aver avviato il server Apache e Mysql dal pannello di controllo di XAMPP, la connessione è stata stabilita correttamente.

In bocca al lupo!


0

Quello che ho risolto per me è fare 2 cose: 1. creare un nuovo utente diverso da root con una password usando i seguenti connad:

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

2. commentare la riga dell'indirizzo IP su mysqld.conf

quindi connettiti con nuovo nome utente e password. dovrebbe funzionare.


Dovrai ripeterlo per tutti gli utenti remoti o aggiungere un carattere jolly anziché Localhost
OneCricketeer

0

Stava provando a connettersi a una versione precedente di MySQL ('versione', '5.1.73'); quando si utilizza una versione del driver più recente viene visualizzato un errore che indica di utilizzare "com.mysql.cj.jdbc.Driver o anche che non è necessario specificare quale si utilizza:

Caricamento classe com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver '. Il driver viene automaticamente registrato tramite SPI e il caricamento manuale della classe di driver non è generalmente necessario.

Ho cambiato la dichiarazione per utilizzare la versione 5.1.38 di mysql-connettore-java e, nel codice, ho mantenuto com.mysql.jdbc.Driver .

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

Tutto è iniziato quando ho visto la risposta di Ankit Jain


0

Il mio firewall stava bloccando il post 3307 su cui il mio MySQL era in ascolto. Quindi ho cambiato la porta da 3307 a 3306, quindi posso collegarmi con successo a un database.


0

Nel mio MacBook ho risolto questo errore solo quando reinstalla la nuova versione di eclipse EE e rimuovo i server locali come xamp mysql o mamp ma ne uso solo uno ...


0

Nel mio caso ho dovuto stabilire un tunnel ssh per il database remoto e tutte le impostazioni erano corrette e anche il test della connessione con PhpStorm ha avuto successo. E anche lo schema è stato caricato, ma non i dati. Invece ho ottenuto:

[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.

Nessuno dei suggerimenti sopra ha funzionato. Per qualsiasi motivo ho provato a risolvere il problema semplicemente riavviando PhpStorm e voilà ha funzionato!


0

Stavo ricevendo più errori come:

  • 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.

Ho dovuto aggiungere:

  • In AndroidManifest.xml includi <uses-permission android:name="android.permission.INTERNET"/>subito dopo il tag manifest di apertura.

  • Aggiungi il driver JDBC nelle dipendenze Gradle (o Maven).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.