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

Erro ao criar conexão somente em uma das classes

Olá, meu código em uma das classes lança uma exceção quando tenta criar a conexão. Os códigos são os seguintes:

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

public class ConnectionFactory {

    public Connection recuperarConexao() throws SQLException {

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

    }

}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestaListagem {

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

        ConnectionFactory connectionFactory = new ConnectionFactory();
        Connection connection = connectionFactory.recuperarConexao();

        Statement stm = connection.createStatement();
        stm.execute("SELECT ID, NOME, DESCRICAO FROM PRODUTO");

        ResultSet rst = stm.getResultSet();

        while(rst.next()) {
            Integer id = rst.getInt("id");
            System.out.println(id);
            String nome = rst.getString("nome");
            System.out.println(nome);
            String descricao = rst.getString("descricao");
            System.out.println(descricao);
        }

        connection.close();

    }

}
import java.sql.Connection;
import java.sql.SQLException;

public class TestaConexao {

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

        ConnectionFactory connectionFactory = new ConnectionFactory();
        Connection connection = connectionFactory.recuperarConexao();

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

        connection.close();

    }

}
A classe TestaListagem funciona correntamente, mas a classe TestaConexao lança a seguinte exceção:

Exception in thread "main" java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
    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.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:827)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:447)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:237)
    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:251)
    at com.mysql.cj.jdbc.admin.TimezoneDump.main(TimezoneDump.java:70)

Poderia me ajudar a tentar descobrir o que estou fazendo errado?

4 respostas

Olá André

Está acusando erro de login no MySQL. Isso ocorre quando temos algum erro no usuário ou senha, porém você disse que estão corretos, certo?

Oi Otávio, isso que está estranho, pois eu consigo acessar o banco utilizando o código da classe TestaListagem que funciona normalmente, mas qualquer outra classe que eu crio não funciona.

O que eu tenho feito pra acompanhar o curso é colocar tudo em uma classe só. Atualmente ela está assim:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestaListagem {

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

        ConnectionFactory connectionFactory = new ConnectionFactory();
        Connection connection = connectionFactory.recuperarConexao();

        //Inserção "bruta" - no delete e listagem bruto tb posso usar o statement
//        Statement stm = connection.createStatement();
//        stm.execute("INSERT INTO PRODUTO (nome, descricao) VALUES ('Mouse', 'Mouse sem fio')", Statement.RETURN_GENERATED_KEYS);
//        
//        ResultSet rst = stm.getGeneratedKeys();
//        while(rst.next()) {
//            Integer id = rst.getInt(1);
//            System.out.println(id);
//        }

        //Inserir com PreparedStatement
        String nome = "Mouse'";
        String descricao = "Mouse sem fio); delete from produto;";

        PreparedStatement stm = connection.prepareStatement("INSERT INTO PRODUTO (nome, descricao) VALUES (?, ?)", Statement.RETURN_GENERATED_KEYS);
        stm.setString(1, nome);
        stm.setString(2, descricao);
        stm.execute();
        ResultSet rst = stm.getGeneratedKeys();
        while(rst.next()) {
            Integer id = rst.getInt(1);
            System.out.println("id: " + id + " inserido");
        }

        //Listagem
        stm = connection.prepareStatement("SELECT ID, NOME, DESCRICAO FROM PRODUTO");
        stm.execute();
        System.out.println("\nAntes de apagar");
        rst = stm.getResultSet();
        while(rst.next()) {
            Integer id2 = rst.getInt("id");
            System.out.println(id2);
            String nome2 = rst.getString("nome");
            System.out.println(nome2);
            String descricao2 = rst.getString("descricao");
            System.out.println(descricao2);
        }

        //Excluir
        stm = connection.prepareStatement("DELETE FROM PRODUTO WHERE id > ?");
        stm.setInt(1, 2);
        stm.execute();
        System.out.println("\nQuantidade de linhas excluídas: " + stm.getUpdateCount());

        //Listagem
        stm = connection.prepareStatement("SELECT ID, NOME, DESCRICAO FROM PRODUTO");
        stm.execute();
        System.out.println("\nDepois de apagar");
        rst = stm.getResultSet();
        while(rst.next()) {
            Integer id2 = rst.getInt("id");
            System.out.println(id2);
            String nome2 = rst.getString("nome");
            System.out.println(nome2);
            String descricao2 = rst.getString("descricao");
            System.out.println(descricao2);
        }

        connection.close();

    }

}

Estou usando:

  • MacOS Monterey Version 12.2.1
  • Eclipse IDE for Java Developers (includes Incubating components) - Version: 2021-12 (4.22.0) - Build id: 20211202-1639
  • MySql 8.0.18
  • mysql-connector-java-8.0.17.jar disponibilizado para download dentro do curso

Olá, ainda não obtive ajuda com meu problema.