Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

CommunicationsException

O código apresentado funciona normalmente na IDE Eclipse, porém quando tento aplicá-lo no IntelliJ, recebo o seguinte erro abaixo:

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:174)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
    at TestaConexao.main(TestaConexao.java:10)
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:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
    at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89)
    at com.mysql.cj.NativeSession.connect(NativeSession.java:120)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818)
    ... 6 more
Caused by: java.net.ConnectException: Connection refused
    at java.base/sun.nio.ch.Net.connect0(Native Method)
    at java.base/sun.nio.ch.Net.connect(Net.java:579)
    at java.base/sun.nio.ch.Net.connect(Net.java:568)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
    at java.base/java.net.Socket.connect(Socket.java:633)
    at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153)
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)
    ... 9 more

Código:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TestaConexao {

    public static void main(String[] args) throws SQLException {

        Connection connection = DriverManager
                .getConnection(
                        "jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC", "root", "root");

        System.out.println("Fechando conexão!");

        connection.close();

    }
}
8 respostas

Jhonas, bom dia. O banco de dados ta ativo? Essa exception da erro quando a aplicação não alcança o bd.

Bom dia! Como posso verificar se ele está ativo? O estranho é que consigo me conectar ao banco de dados perfeitamente com o Eclipse, mas quando se trata de uma outra IDE, eu recebo este erro. Estou utilizando o WSL2, o projeto consta dentro do mesmo, porém o MySQL está instalado no Windows (não sei se isso interfere em algo).

Só para eu entender, vc ta tentando conectar no banco de dados que esta instalado localmente em uma aplicação que ta no docker?

Não uso docker, apenas utilizo o Ubuntu no Windows instalado através do recurso WSL.

Cara, estranho. Vc sobe o eclipse e o intellij no windows tb?

Sim, uso os dois no Windows. Eu achei até que fosse o driver, usei um outro através do maven, e deu o mesmo erro. Inclusive desativei o antivírus pra ver se estava bloqueando alguma conexão, mas o erro persiste. Estou acompanhando o curso com o Eclipse enquanto não resolvo.

solução!

Consegui finalmente resolver e entender o problema. De fato a aplicação não estava alcançando a DB, pois além de eu ter o Mysql instalado no Windows, eu também precisava do mysql-server instalado no WSL, configurar o mesmo e também iniciá-lo através do comando "service mysql start". Já era de conhecimento que o Windows e o WSL compartilham as mesmas portas, portanto também é possível visulizar as DBs dos dois sistemas. Outro problema também era que o Firewall do Windows estava bloqueando o acesso do IntelliJ ao WSL.

Opa, que bom que conseguiu resolver, amigo =)