Erro ao carregar dados mysql

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.

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

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

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.

Ok Obrigado.