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

Conetando com mysql

Bom dia, estou tendo problemas em ligar com o banco de dados sql. Na linha de comando(cmd) ja criei a a base de dadoq e a respetiva tabela. No projeto java(estou usando java 11) ja adicionei o conector do mysql(/loja-virtual/lib/mysql-connector-java-8.0.14.jar) mas continua dando erro. eis a minha classe

package be.com.alura.mysql;
import java.sql.*;


public class TestaConeçao {
    public static void main(String args[]){  

    Class.forName("com.mysql.cj.jdbc.Driver");  
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/loja-virtual","root","senha");  
        System.out.println("tentando conexao");  
    }
}

e da-me o seguinte erro:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
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:835)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at be.com.alura.mysql.TestaConeçao.main(TestaConeçao.java:15)
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:490)
    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:91)
    at com.mysql.cj.NativeSession.connect(NativeSession.java:152)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
    ... 6 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.base/java.net.PlainSocketImpl.connect0(Native Method)
    at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
    at java.base/java.net.Socket.connect(Socket.java:591)
    at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65)
    ... 9 more

podiam-me ajudar por favor? Muito obrigado desde ja.

5 respostas

Olá Emanuel!

Tenta usar esse Driver:

http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar

Aguardo seu retorno! :D

Bom dia Guilherme,desde ja muito obrigado pela ajuda, jà adicionei o ficheiro .jar à pasta lib,fiz o "build path". mas continua dando erro :-(. Que mais posso fazer?

Eu eliminei o projeto do Eclipse todo, criei um novo e adicionei o conector do mysql(/loja-virtual/lib/mysql-connector-java-8.0.14.jar). Agora o erro é outro:

Exception in thread "main" java.sql.SQLException: The server time zone value 'Hora Padrão do Leste da AS' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at br.com.alura.TestaConneçao.main(TestaConneçao.java:10)
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Hora Padrão do Leste da AS' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
    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:490)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
    at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
    at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2241)
    at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2265)
    at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1319)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:966)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
    ... 6 more

Como posso alterar o "Server time"?

solução!

Olá Emanuel!

Deixarei aqui algumas coisas que você pode tentar fazer para resolver esse problema:

1 - Só uma observação que eu não havia reparado antes: Sua classe está com um caracter especial.

public class TestaConeçao {

Remova o Ç pois não podemos usar esses caracteres em nomes de Classes nem de variaveis. Ficando assim:

public class TestaConecao {

2 - Uma outra coisinha tambem, esse CJ no class for name está correto?

Class.forName("com.mysql.cj.jdbc.Driver"); 

Se estiver ok, tudo bem, mas costumo ver esse código sem o CJ:

Class.forName("com.mysql.jdbc.Driver"); 

3 - Você pode tentar tambem alterar o Timezone no MySQL:

SET time_zone='America/Sao_Paulo';

4 - Se você tiver um arquivo chamado persistence.xml troque o que está em:

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/loja-virtual"/> 

Para:

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/loja-virtual?serverTimezone=UTC"/> 

Espero que te ajude! Aguardo seu retorno! ^^

Bom dia :-) eu alterei a classe de acordo com as instruções que me deu:

package br.com.alura;

import java.sql.*;


        public class TestaConnecao {
            public static void main(String args[]) throws ClassNotFoundException, SQLException{  

            Class.forName("com.mysql.cj.jdbc.Driver");  
            Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/loja_virtual?serverTimezone=UTC","root","Portugal08.");  
                System.out.println("tentando conexao");  
            }
        }


e ja FUNCIONA :-) Muito obrigado!!!!!!! Um muito bom dia para voçe.