Erro ao carregar dados mysql

4 respostas Resolvido
A

Boa noite.

Tenho uma classe com esse sql Chamada UsuarioSQL com esse metodo:

public class UsuarioSQL {
     public void carregaUsuario(DadosUsuario usuario){
         Connection conexao = ConexaoDB.getConexao();
         String sql = "SELECT * FROM tbuser ORDER BY nomeusuario";         
         try {
            PreparedStatement smt = conexao.prepareStatement(sql);
            ResultSet rs = smt.executeQuery();              
            while(rs.next()){                
               usuario.setIdUsuario(rs.getInt("idusuario")); 
               usuario.setNomeUsuario(rs.getString("nomeusuario"));
               usuario.setCpfUsuario(rs.getString("cpfusuario"));
               usuario.setLoginUsuario(rs.getString("loginusuario"));
               usuario.setSenhaUsuario(rs.getString("senhausuario"));
               usuario.setPerfilUsuario(rs.getString("perfilusuario"));
            }
            ConexaoDB.close(conexao, smt, rs);
            
        } catch (SQLException ex) {
            System.out.println("Erro! O cadastro não foi carregado"); 
        }
     }
}

Em outra classe chamda DadosUsuario tenho os atributos com esse metodo:

public class DadosUsuario {
    private int idUsuario;
    private String nomeUsuario;
    private String cpfUsuario;
    private String loginUsuario;
    private String senhaUsuario;
    private String perfilUsuario;
    
    public DadosUsuario() {
    }

    public DadosUsuario(int idUsuario, String nomeUsuario, String cpfUsuario, String loginUsuario, String senhaUsuario, String perfilUsuario) {
        this.idUsuario = idUsuario;
        this.nomeUsuario = nomeUsuario;
        this.cpfUsuario = cpfUsuario;
        this.loginUsuario = loginUsuario;
        this.senhaUsuario = senhaUsuario;
        this.perfilUsuario = perfilUsuario;
    }

    public int getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(int idUsuario) {
        this.idUsuario = idUsuario;
    }

    public String getNomeUsuario() {
        return nomeUsuario;
    }

    public void setNomeUsuario(String nomeUsuario) {
        this.nomeUsuario = nomeUsuario;
    }

    public String getCpfUsuario() {
        return cpfUsuario;
    }

    public void setCpfUsuario(String cpfUsuario) {
        this.cpfUsuario = cpfUsuario;
    }

    public String getLoginUsuario() {
        return loginUsuario;
    }

    public void setLoginUsuario(String loginUsuario) {
        this.loginUsuario = loginUsuario;
    }

    public String getSenhaUsuario() {
        return senhaUsuario;
    }

    public void setSenhaUsuario(String senhaUsuario) {
        this.senhaUsuario = senhaUsuario;
    }

    public String getPerfilUsuario() {
        return perfilUsuario;
    }

    public void setPerfilUsuario(String perfilUsuario) {
        this.perfilUsuario = perfilUsuario;
    }
}

Quando chamo o metodo para exibir o cadastro retorna null

public void mostraUsuarios(){

        UsuarioSQL usuarios = new UsuarioSQL();       
        if(usuarios != null){
        DadosUsuario usuario = new DadosUsuario();
        System.out.println("ID: " + usuario.getIdUsuario());
        System.out.println("Nome: " + usuario.getNomeUsuario());
        System.out.println("CPF: " + usuario.getCpfUsuario());
        System.out.println("Login: " + usuario.getLoginUsuario());
        System.out.println("Senha: " + usuario.getSenhaUsuario());
        System.out.println("Perfil: " + usuario.getPerfilUsuario());
        }else{
            System.out.println("Não foi possivel carregar o cadastro");
        }
    }

Alguem pode me ajudar? Sou iniciante em java.

4 Respostas

Lucas_Camara

Acho que o método carregaUsuario, em vez de receber um parâmetro, deveria apenas retornar a lista de usuários, assim:

public List<Usuario> carregarUsuarios() {
	Connection conexao = ConexaoDB.getConexao();
	String sql = "SELECT * FROM tbuser ORDER BY nomeusuario";
	List<Usuario> usuarios = new ArrayList<>();
	
	try {
		PreparedStatement smt = conexao.prepareStatement(sql);
		ResultSet rs = smt.executeQuery();
		
		while(rs.next()) {
			Usuario usuario = new Usuario();
			
			usuario.setIdUsuario(rs.getInt("idusuario")); 
			usuario.setNomeUsuario(rs.getString("nomeusuario"));
			usuario.setCpfUsuario(rs.getString("cpfusuario"));
			usuario.setLoginUsuario(rs.getString("loginusuario"));
			usuario.setSenhaUsuario(rs.getString("senhausuario"));
			usuario.setPerfilUsuario(rs.getString("perfilusuario"));
			
			usuarios.add(usuario);
		}
	} catch (SQLException ex) {
		System.out.println("Erro! O cadastro não foi carregado"); 
	} finally {
		ConexaoDB.close(conexao, smt, rs);
	}
	
	return usuarios;
}

E o método que apresenta os usuários pode ficar assim:

public void mostrarUsuarios() {
	UsuarioSQL usuarioSQL = new UsuarioSQL();
	List<Usuario> usuarios = usuarioSQL.carregarUsuarios();
	
	if (usuarios.isEmpty()) {
		System.out.println("Nenhum usuário foi encontrado.");
		return;
	}
	
	for (Usuario usuario : usuarios) {
		System.out.println("ID: " + usuario.getIdUsuario());
		System.out.println("Nome: " + usuario.getNomeUsuario());
		System.out.println("CPF: " + usuario.getCpfUsuario());
		System.out.println("Login: " + usuario.getLoginUsuario());
		System.out.println("Senha: " + usuario.getSenhaUsuario());
		System.out.println("Perfil: " + usuario.getPerfilUsuario());
		System.out.println("========");
	}
}

Algumas observações:

  • Em vez da classe chamar DadosUsuario, acho que apenas Usuario fica bem melhor.
  • Chame o ConexaoDB.close no bloco finally, isso garante que sempre será executado, mesmo que ocorra algum erro
  • Use verbos nos nomes de métodos (carregarUsuarios em vez de carregaUsuario), pois indica uma ação, que é o que métodos fazem
A
Solucao aceita

Obrigado pela ajuda.
Preciso carregar cada campo numa TextFild. Desse jeito daria certo em uma tableView. porque carrega todos cadastros.

Lucas_Camara

Se for preciso carregar os dados de um único usuário, vc precisar recuperar apenas o usuário que ver visualizar nos textfields. Uma busca pelo ID já resolve.

A

Ok Obrigado.

Criado 1 de maio de 2021
Ultima resposta 2 de mai. de 2021
Respostas 4
Participantes 2