Erro de class com.mysql.jdbc.jdbc

Mensagem que aparece na ID NetBeans

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.
Graphics(12-1) Enabling debug

Mensagem ao tentar realizar o login na aplicação:

framloginwjava.lang.classcastexception: class com.mysql.jdbc.jdbc4resultset cannot be cast to class telalogin$resultset (com.mysql.jdbc.jdbc4resultset and telalogin$resultset are in unnamed module of loader ‘app’)

Porém a conexão com o banco de dados é realizada com sucesso.

run:
Conex�o com o banco de dados realizada com sucesso
BUILD SUCCESSFUL (total time: 0 seconds)

O que eu faço?

Codigo da class ConexaoDAO já com algumas soluções que vi aqui, mas não funcionou.

package DAO;

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

public class ConexaoDAO {
   
    private static final String URL = "jdbc:mysql://localhost:3306/dbvozativa";
    private static final String USER = "root";
    private static final String PASS = "";
    
    public static Connection getConnection() {
       try {
           return DriverManager.getConnection(URL, USER, PASS);      
        } catch (SQLException ex){
            throw new RuntimeException("Erro de conexão com o banco de dados", ex);
        }
    }
    
    public static void closeConnection(Connection connection){
       try {
           if (connection != null) {
               connection.close();
           }
       } catch (SQLException ex) {
           throw new RuntimeException("Erro de conexão com o banco de dados", ex);
       }  
    }
    
    public static void closeConnection(Connection connection, PreparedStatement statement){
       try {
           if (connection != null) {
               connection.close();
           }
           
           if (statement != null){
                statement.close();
           }
       } catch (SQLException ex) {
           throw new RuntimeException("Erro de conexão com o banco de dados", ex);
       }  
    }
    
    public static void closeConnection(Connection connection, PreparedStatement statement, ResultSet resultSet){
       try {
           if (connection != null) {
               connection.close();
           }
           
           if (statement != null){
                statement.close();
           }
           
           if (resultSet != null){
                resultSet.close();
           }
       } catch (SQLException ex) {
           throw new RuntimeException("Erro de conexão com o banco de dados", ex);
       } 
    }
    
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        System.out.println("Conexão com o banco de dados realizada com sucesso");
        String sql = null;
        String dadosDaConexao = null;
        
        try (Connection con = DriverManager.getConnection(dadosDaConexao);
     PreparedStatement ps = con.prepareStatement(sql)) {
            int userId = 0;
    ps.setInt(1, userId); // setar os parâmetros da query
    try (ResultSet rs = ps.executeQuery()) {
        while(rs.next()) {
            // usar o ResultSet (por exemplo, rs.getInt("id"), etc)
        }
    }
} catch (SQLException e) {
            // mostrar mensagem de erro, etc
            
}
    }
}

Tá aí o problema:
class com.mysql.jdbc.jdbc4resultset cannot be cast to class telalogin$resultset

Dentro da sua classe TelaLogin você criou uma classe chamada Resultset e está tentando fazer cast do Resultset original para essa sua classe, está errado!

2 curtidas

Olá!

Troque com.mysql.jdbc.Driver por com.mysql.cj.jdbc.Driver

e faz um teste pra ver se funciona.

Abraços.

Fiz isso e não funcionou!

Cara, foi exatamente o que você falou. Muito obrigado por ter me mostrado a solução correta. Um abraço!

1 curtida

Na verdade eu só repeti o que o compilador “falou” pra você.
Sempre interprete os erros de compilação, na maioria das vezes o compilador te dá a mensagem muito assertiva sobre o problema.

Bom dia! Você teria como verificar o que está acontencedo nesse if (ResultSet.next()) { ? Ele fica com uma bola vermelha com um ponto de Exclamação. Eu não entendi muito bem.

Segue o código abaixo.

try {
ConexaoDAO conn = new ConexaoDAO();
Connection connection = ConexaoDAO.getConnection();

        String sql = "SELECT usuario, senha FROM morador where usuario = '" + txtusuario.getText() + "' and  senha = '" + txtsenha.getText() + "'";
        conn.executeSQL(sql);
        //Se houver resultado, ou seja, se validar o usuario e senha, faça algo.
        if (Resultset.next()) {
            //chamar a tela que eu quero abrir
        TelaPrincipal principal = new TelaPrincipal();
        //usando o dispose para fechar a tela
        this.dispose();
        principal.setVisible(true);
        } else {
            // enviar mensagem dizendo incorreto.
        JOptionPane.showMessageDialog(null, "Usuário ou senha Inválida");
        }

    } catch (Exception erro) {
        System.out.println("Erro: "+erro);
    }

}

Aqui no fórum não dá pra ver nenhuma bola vermelha com ponto de exclamação.

Onde foi declarado esse Resultset?
Porque o nome está em maiúsculo?
Porque não é uma variável local?