Os componentes do meu formulario nao recebem os gets da classe dto

40 respostas
java
J

Ola amigos. Sou iniciante em java, mas já tento a dias solucionar o problema. quero colocar os atributos usuário, fone, login, perfil e senha pegos do banco de dados e com eles preencherem os campos de mesmo do formulário usuário. Isso após entrar com um numero no campo id_usuario. Acontece que nenhum campo no formulário está sendo preenchido. alguém pode avaliar meu código e ajudar na sequencia de meu aprendizado? O programa nao gera nehum erro.
O código é esse:

public class UsuarioDto {
    private int iduser;
    private String usuario, fone, login, senha, perfil;

    
    public void setIduser(int iduser) {
        this.iduser = iduser;
     }
    
    public int getIduser() {
        return iduser;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
   }
    
    public String getUsuario() {
        return  usuario;
    }

   public void setFone(String fone) {
        this.fone = fone;
     }

    public String getFone() {
        return fone;
    }

     public void setLogin(String login) {
        this.login = login;
    }

    public String getLogin() {
        return login;
    }

   public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getSenha() {
        return senha;
    }

    public void setPerfil(String perfil) {
        this.perfil = perfil;
    }

    public String getPerfil() {
        return perfil;
    }

}
public void consultar (){
        
        try {
             
        int funcId= Integer.parseInt(txtUsuarId.getText());
      
        UsuarioDto objUserDTO = new UsuarioDto();
        objUserDTO.setIduser(funcId);
        
        
        UsuarioDAO objUserDAO = new UsuarioDAO();
       
        objUserDAO.consultarUsuario(objUserDTO);
        
        ResultSet retUsuarioDao = objUserDAO.consultarUsuario(objUserDTO);
        
        txtUsuarNome.setText(objUserDTO.getUsuario());
                
        txtUsuarFone.setText(objUserDTO.getFone());
       
        txtUsuarLogin.setText(objUserDTO.getLogin());

        txtUsuarSenha.setText(objUserDTO.getSenha());
       
        cboUsuarPerfil.setSelectedItem(objUserDTO.getPerfil());
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null,"Erro ao cosultar usuario"+ erro);
        }
     
   
    }
}
public class UsuarioDAO {

    Connection conexao;
    PreparedStatement pst;

    /*result set tras informações do banco dados*/
    ResultSet rs;
   
    public ResultSet consultarUsuario(UsuarioDto objUsuarDTO) {
           
        String sql = "select *from tbUsuarios where iduser=?";

         conexao = new ModConexaoDAO().conector();

        try {
            
            UsuarioDto objUsuarioDTO = new UsuarioDto();
            pst = conexao.prepareStatement(sql);
            pst.setInt(1, objUsuarDTO.getIduser());
            
             System.out.println("O conteudo em IdUser é: "+ pst);
           
            rs = pst.executeQuery();
            
            
            if (rs.next()) {
                
                objUsuarioDTO.setUsuario(rs.getString("usuario"));
                
                objUsuarioDTO.setFone(rs.getString("fone"));
                
                objUsuarioDTO.setLogin(rs.getString("login"));
                
                objUsuarioDTO.setSenha(rs.getString(5));
                
                objUsuarioDTO.setPerfil(rs.getString(6));
            } else {
                System.out.println("Não há mais dados......");
                JOptionPane.showMessageDialog(null, "Usuario nao cadastrado..... ");

            }
           
               return rs;

        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Erro consultar usuario: " + erro);
           return null;
        }
      
        
    } 

}

40 Respostas

J

Olaaaa…Ninguem para dar uma ajuda?

Fefo80

Posta o código completo. Está faltando coisa aí.

J

O que mais poderia estar faltando? A outra parte é o modulo de conexao.

package br.com.infox.dao;
//import java.sql.*;

import java.sql.Connection;
import java.sql.DriverManager;
import javax.swing.JOptionPane;

public class ModConexaoDAO{
    //metodo que fara a conexao com o banco
    
    public static Connection conector(){
        /*criando uma variavel conexao que ira receber a conexao*/
        Connection conexao = null;
        
        /*chamando o drive importado*/
        String driver = "com.mysql.jdbc.Driver";
        
        /*armazenando infromacoes referente ao banco*/
        String url ="jdbc:mysql://localhost:3306/dbinfox?useTimezone=true&serverTimezone=UTC";
        String user = "root";
        String password = "";
        
        try {
            /*executa o arquivo do driver*/
            Class.forName(driver);
            conexao = DriverManager.getConnection(url,user,password);
            return conexao;
            
        } catch (Exception erro) {
             JOptionPane.showMessageDialog(null, "Erro ao carregar banco: " + erro);
           return null;     
    }
}
}
Lucas_Camara

Em vez de passar o UsuarioDto como parâmetro no método consultarUsuario. Faça o método retornar um UsuarioDto e receber o ID do funcionário como parâmetro. Assim:

public UsuarioDto consultarUsuario(int idFuncionario) {
}

Após fazer essa alteração, execute sua aplicação no modo debug e inspecione o valor retornado pelo método consultarUsuario da classe UsuarioDAO, e veja se os valores estão sendo retornados corretamente do banco de dados.

J
Estou tentando a sua dica, mas ainda fica a duvida sobre meu código, o porque de nao retornar o get, retorna como null. fiz um print no get  public String getUsuario() {

System.out.println("O usuario em getUsuario é…: "+ usuario);

return  usuario;

} está retornando null.
Lucas_Camara

Não entendi essa parte. Como assim retornar o get? O que é esse get?


O teste que vc precisa fazer é, depois de alterar o método conforme falei, verificar se o usuário está sendo retornado com os valores corretos, assim:

int funcId = Integer.parseInt(txtUsuarId.getText());
UsuarioDAO objUserDAO = new UsuarioDAO();

UsuarioDto usuario = objUserDAO.consultarUsuario(funcId);
System.out.println(usuario.getUsuario()); // veja se o valor está sendo retornado igual o valor que está no banco
J

Olá. quando me referi, talvez de forma errônea a retorna o get, é pegar os dados get, e passar para os campos do formulario view. estou testando sua dia. Obrigado, retorno par dizer se deu certo.

J

Olá, sua dica UsuarioDto usuario = objUserDAO.consultarUsuario(funcId);
System.out.println(usuario.getUsuario()); nao retorna o usuario cadastrado no banco. O retorno conitua sendo null. se voce observar no meu código no trecho txtUsuarNome.setText(objUserDTO.getUsuario()); já pedia o mesmo retorno, que também retorna null. AInda tenho o mesmo problema.

J
 o set recebe exatamente o que digito no campo do formulário.

public void setIduser(int iduser) {

this.iduser = iduser;

System.out.println("O valor em setIduser é: " + iduser);

} ou seja set ok, get é null.

Acho que estou agarrado em coisa muito básica, e não consigo continuar com meus estudos sem entender o que está acontecendo.
Lucas_Camara

Como ficou o método consultarUsuario depois da alteração q vc fez?

J
OláFiz exatamente como voce sugeriu, nada a mais.

int funcId = Integer.parseInt(txtUsuarId.getText());

UsuarioDAO objUserDAO = new UsuarioDAO();

UsuarioDto usuario = objUserDAO.consultarUsuario(funcId);
System.out.println(usuario.getUsuario());

Lucas_Camara

Quero ver a implementação do método consultarUsuario, para ver como vc alterou ele.

J

Está ficando muito confuso!!! o system out println retorna null. nao fiz nenhuma alteracao no metodo, somente a da sugestao.

J

O programa continua como foi postado, somente com a alteração que voce propos. Não há mais nenhuma alteração.

J

UsuarioDto usuario = objUserDAO.consultarUsuario(funcId);
System.out.println(usuario.getUsuario()); deveria imprimir o nome do usuario, se não imprimi no console é porque nao há nada dentro do getUsuario();

Lucas_Camara

Vc teve que alterar o método consultarUsuario, pois antes ele recebia um UsuarioDto como parâmetro e, depois da alteração, ele está recebendo um int como parâmetro, ou seja, a implementação do método tem que ter sido alterada, senão não vai funcionar.

J

Beleza, vou rever aqui…

J

Mas se é para passar um int id_funcionário como parâmetro, o conceito de encapsulamento de classe perde o valor, pois nao estarei usando get() set() da classe encapsulada, e não é isso que eu quero, pois estou no momento testando exatamente o modelo de 3 camadas…

Lucas_Camara

Passar um int como parâmetro não quebra conceito nenhum não uai. É que, se vc quer recuperar algo pelo ID, vc soh precisa passar o ID. A responsabilidade do método é, receber o ID e devolver o objeto referente à esse ID.

Na verdade, alterar um parâmetro recebido é uma prática ruim.

Sobre o encapsulamento de classe, a camada DAO tem que saber usar a classe que será usada como entidade para mapear uma tabela do banco de dados, pois é assim que essa camada irá usar os dados do banco na aplicação.

Repare que o Model faz o acesso ao banco de dados. A forma de representar a tabelas do banco na aplicação é através de classe geralmente chamadas de Entidade. Pense no DAO como parte da camada Model.

J

Ola…Minha classe inicial tinha o resulSet, ao que entendi nos estudos, sempre que é preciso pesquisar no banco dados determinada clausula, preciso utilizar o resulset que me trará os dados solicitados em minha pesquisa. tentei criar o metodo que voce prope, nao sei se essa era sua ideia, mas ainda assim retorna null no println no metdodo public void consultarUsuario(int funcId) da classe UsuarioDAO. meu programa foi reduzido ao abaixo para realizar o teste.
no print vem: o nome do usuario retornado no DAO é: null

public void consultar (){

try {
    /*armazena o que no Id digtado no objeto txtUsuarId*/
    int funcId= Integer.parseInt(txtUsuarId.getText());
          
    /*instancia a classe funcionarioDAO, e passa o funcId
    UsuarioDAO objUserDAO = new UsuarioDAO();
    /*executa o metodoDAO e passa o parametro solicitado*/
    objUserDAO.consultarUsuario(funcId);
    
    } catch (Exception erro) {
        JOptionPane.showMessageDialog(null,"Erro ao cosultar usuario"+ erro);
    }
}

public void consultarUsuario(int funcId) {

String sql = "select *from tbUsuarios where iduser=?";

    /*chama modulo de conexao*/
    conexao = new ModConexaoDAO().conector();

    try {
        
        pst = conexao.prepareStatement(sql);
        pst.setInt(1, funcId);
        
        UsuarioDto objUsuarioDTO = new UsuarioDto();
        
        rs = pst.executeQuery();

    	System.out.println(" o nome do usuario retornado no DAO é: " + objUsuarioDTO.getUsuario());
        
  
        //return rs;
        
    } catch (Exception erro) {
        JOptionPane.showMessageDialog(null, "Erro consultar usuario: " + erro);
      // return null;
    }
}
Lucas_Camara

Certo, mas faltou uma coisa.

Antes do print, vc deve pegar os dados retornados do banco através do resultset:

public UsuarioDto consultarUsuario(int funcId) {
    String sql = "SELECT * FROM tbUsuarios WHERE iduser = ?";

    // chama modulo de conexao
    conexao = new ModConexaoDAO().conector();

    try {
        pst = conexao.prepareStatement(sql);
        pst.setInt(1, funcId);
        rs = pst.executeQuery();

        // verifica se o resultset possui dados
        if (rs.next()) {
            UsuarioDto objUsuarioDTO = new UsuarioDto();
            objUsuarioDTO.setUsuario(rs.getString("NOME_DA_COLUNA"));

            System.out.println(" o nome do usuario retornado no DAO é: " + objUsuarioDTO.getUsuario());
            return objUsuarioDTO;
        } else {
            System.out.println("Nenhum resultado encontrado para o ID " + funcId);
            return null;
        }
    } catch (Exception erro) {
        JOptionPane.showMessageDialog(null, "Erro consultar usuario: " + erro);
        return null;
    } finally {
        // feche aqui a conexão, o preparedStatement e o resultSet
    }
}
J

Correto, agora imprimiu o nome do usaurio. A duvida agora é: De inicio, pegava o que o usuario digitava no campo idUsuario getText(), e salvava numa variavel String funcID, em seguida instanciava a DTO e setava no idUser da DTO funcId.
int funcId= Integer.parseInt(txtUsuarId.getText());

UsuarioDto objUserDTO = new UsuarioDto();
    objUserDTO.setIduser(funcId);

enviava para a instancia objUsuarioDAO o que havia sido setado em ObjUserDTO.
objUserDAO.consultarUsuario(objUserDTO);

em seguida pegava o resulSet
ResultSet retUsuarioDao = objUserDAO.consultarUsuario(objUserDTO);

recebia na classe TelaUsuario fazendo o if(consultarUsuario.next()) {

preencher os campos nome (txtUsuarNome), fone(txtUsuarFone), login(txtUsuarLogin), senha(txtUsuarSenha), perfil(txtUsuarPerfil)

mas nao retonrava nem preenchia nenhum campo

}

A pergunta é porque nao deu certo passando diretamente para a DTO set() e depois passando como parâmetro para o método consultar com o get()?
agora preciso enviar estes dados para o formulário e preencher os campos dele.

Lucas_Camara

Talvez a forma como vc estava usando o ResultSet também não estava correto. Para pegar os valores do resultSet, vc deve antes chamar o método next para poder “andar” no set de resultados retornados do banco.

Essa agora está mais fácil. Com o UsuarioDto retornado do método consultarUsuario devidamente preenchido, agora basta vc chamar os métodos de cada campo setando o valor neles. Ex.:

txtUsuario.setText(usuarioDto.getUsuario());
J

Meu formulário está na View,TelaUsuario,as linhas txtUsuario.setText(usuarioDto.getUsuario()); e demais já estavam prontas no programa inicial dentro dessa classe. acredito que preciso conseguir fazer o retorno de consultarUsuario para dentro da view TelaUsuario , pois do modo que está os campos continuam vazios.

private void btnUsuarReadActionPerformed(java.awt.event.ActionEvent evt) {                                             
        consultar();
    }  

    public void consultar (){
        
        try {
               /*armazena o que no Id digtado no objeto txtUsuarId*/
        int funcId= Integer.parseInt(txtUsuarId.getText());
        
        /*Para passar os dados a DTO, e acessar esta classe, precisa instanciar, 
        atraves doo objeto é que acessamos a classe*/
        UsuarioDto objUsuarioDTO = new UsuarioDto();
        //objUsuarioDTO.setIduser(funcId);
        
        
        /*acessa a classe funcionarioDAO, que agora tem os valores de DTO,
        para entao exibir o conteudo view*/
        UsuarioDAO objUserDAO = new UsuarioDAO();
        /*executa o metodoDAO e passa o parametro solicitado*/
        objUserDAO.consultarUsuario(funcId);
        
        //UsuarioDAO retornoDAO = new UsuarioDAO();
        
        //consultarUsuario(funcId);
        
        /*recebe o retorno da classe UsuarioDao*/
        //ResultSet retUsuarioDao =retornoDAO.consultarUsuario(ResultSet);
       
        
        //if(retUsuarioDao.next()){
        /*Preenchendo os campos do formulario view*/
        txtUsuarNome.setText(objUsuarioDTO.getUsuario());
        System.out.println("Opa....aqui está o usuario: "+ txtUsuarNome.getText());

        txtUsuarFone.setText(objUsuarioDTO.getFone());
        System.out.println("Opa....aqui está o telefone dele: "+ txtUsuarFone.getText());
       
 txtUsuarLogin.setText(objUsuarioDTO.getLogin());
        txtUsuarSenha.setText(objUsuarioDTO.getSenha());
        /*A linha abaixo preenche o combox*/
        cboUsuarPerfil.setSelectedItem(objUsuarioDTO.getPerfil());
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null,"Erro ao cosultar usuario"+ erro);
        }

Para mim o if(rs.next()) teria que estar dentro da view TelaUsuario.Para preencher os campos do formulario.

Lucas_Camara

Não precisa, pois dessa forma que vc está pensando trata-se de uma prática ruim. Que é misturar as camadas. Sua view não precisa conhecer nenhum aspecto do banco de dados. Quanto mais as camadas ficarem isoladas, melhor.

Para usar os dados do usuário na view, basta obter o UsuarioDto retornado pelo método consultarUsuario:

UsuarioDto objUsuarioDTO = objUserDAO.consultarUsuario(funcId);
// aqui vc pega os atributos do usuario e seta nos campos da tela

Essa separação nas camadas é muito importante para facilitar o entendimento do código, manutenção, evolução, testes, etc. Talvez para um sistema pequeno, não faça diferença, mas para sistemas maiores é crucial que o código esteja organizado.

Não há pq a tela conhecer um objeto do tipo ResultSet. Por isso existe o conceito de DAO e Repository, para exatamente abstrair esses objetos e devolver apenas aquilo que a aplicação precisa que, no seu caso, é o UsuarioDto com os dados preenchidos.

Lucas_Camara

Peguei seu código e fiz umas mudanças. Veja o que vc acha:

private void btnUsuarReadActionPerformed(java.awt.event.ActionEvent evt) {                                             
    consultar();
}  

public void consultar() {
    try {
        // Obtém o ID do usuário informado na tela
        int funcId = Integer.parseInt(txtUsuarId.getText());

        // Cria o DAO para recuperar os dados do usuário
        UsuarioDAO usuarioDao = new UsuarioDAO();
        
        // Realiza a consulta do usuário pelo ID
        UsuarioDto usuario = usuarioDao.consultarUsuario(funcId);
        
        // Verifica se o usuário não foi encontrado
        if (usuario == null) {
            JOptionPane.showMessageDialog(null, "Usuário não encontrado para o ID " + funcId);
            return;
        }
        
        // Preenche os campos do formulário para o usuário encontrado
        txtUsuarNome.setText(usuario.getUsuario());
        txtUsuarFone.setText(usuario.getFone());
        txtUsuarLogin.setText(usuario.getLogin());
        txtUsuarSenha.setText(usuario.getSenha());
        cboUsuarPerfil.setSelectedItem(usuario.getPerfil());
    } catch (Exception erro) {
        JOptionPane.showMessageDialog(null, "Erro ao cosultar usuario: " + erro);
    }
}
J

Entao…No meu entendimento o caminho seria, pega da view passa set() na dto, dao pega get() da dto executa preparedstament e passa set() novamente para dto, a view pega get() da dto e apresenta ao usuario. este é o conceito que eu estava seguindo. Não é isso?
modifiquei minha view para assim:
public void consultar (){

try {
           /*armazena o que no Id digtado no objeto txtUsuarId*/
    int funcId= Integer.parseInt(txtUsuarId.getText());
    
    /*Para passar os dados a DTO, e acessar esta classe, precisa instanciar, 
    atraves doo objeto é que acessamos a classe*/
    UsuarioDto objUsuarioDTO = new UsuarioDto();
    //objUsuarioDTO.setIduser(funcId);
    
    
    /*acessa a classe funcionarioDAO, que agora tem os valores de DTO,
    para entao exibir o conteudo view*/
    UsuarioDAO objUserDAO = new UsuarioDAO();
    /*executa o metodoDAO e passa o parametro solicitado*/
    objUserDAO.consultarUsuario(funcId);
    
    UsuarioDAO retornoDAO = new UsuarioDAO();
    //consultarUsuario(funcId);
    
    /*recebe o retorno da classe UsuarioDao*/
    ResultSet retUsuarioDAO = retornoDAO.consultarUsuario(funcId);
   
    if(retUsuarioDAO.next()){
         txtUsuarNome.setText(objUsuarioDTO.getUsuario());
         System.out.println("Opa....aqui está o usuario: "+ txtUsuarNome.getText());
    }
    
    } catch (Exception erro) {
        JOptionPane.showMessageDialog(null,"Erro ao cosultar usuario"+ erro);
    }
}

Nao mostra o usuario no campo txtUsuarNome do formulario. Estou ainda confuso!!

" Para usar os dados do usuário na view, basta obter o UsuarioDto retornado pelo método consultarUsuario :

UsuarioDto objUsuarioDTO = objUserDAO.consultarUsuario(funcId);
// aqui vc pega os atributos do usuario e seta nos campos da tela
```"
este foi o ultimo teste que fiz antes dessa resposta, ainda assim nao mostrou o nome do usuario no formulario.
J

voce está usando um if(usuario==null) retornando mensagem de erro, vou testar aqui.

Lucas_Camara

O que estou falando é que retornar o ResultSet é muuito errado. Vc está criando um alto acoplamento que não deve acontecer de forma alguma. Para a tela do sistema, não importa se os dados estão vindos de um banco de dados, de um webservice, de um arquivo de texto. A tela só quer os dados referente ao usuário, ou seja, um objeto UsuarioDto preenchido.

É melhor retornar o usuário do método em vez do ResultSet.

J

Opa, beleza? A mudança que voce propôs testei, a linha
UsuarioDto usuario = usuarioDao.consultarUsuario(funcId);está com erro informando que UsuarioDto voi nao pode ser convertido para UsuarioDto. Mas consultar usuario e usuariodto sao void.

Lucas_Camara

O método consultarUsuario não pode ser void. Ele deve retornar um UsuarioDto.

J

Ola amigo, beleza? Mas a propria modificacao que fez, colocou consultar() como void. O primeiro programa que postei, já retornava resulset. olhe ai…

Peguei seu código e fiz umas mudanças. Veja o que vc acha:

private void btnUsuarReadActionPerformed(java.awt.event.ActionEvent evt) {                                             
    consultar();
}  

public void consultar() {
    try {
        // Obtém o ID do usuário informado na tela
        int funcId = Integer.parseInt(txtUsuarId.getText());

        // Cria o DAO para recuperar os dados do usuário
        UsuarioDAO usuarioDao = new UsuarioDAO();
        
        // Realiza a consulta do usuário pelo ID
        UsuarioDto usuario = usuarioDao.consultarUsuario(funcId);
        
        // Verifica se o usuário não foi encontrado
        if (usuario == null) {
            JOptionPane.showMessageDialog(null, "Usuário não encontrado para o ID " + funcId);
            return;
        }
        
        // Preenche os campos do formulário para o usuário encontrado
        txtUsuarNome.setText(usuario.getUsuario());
        txtUsuarFone.setText(usuario.getFone());
        txtUsuarLogin.setText(usuario.getLogin());
        txtUsuarSenha.setText(usuario.getSenha());
        cboUsuarPerfil.setSelectedItem(usuario.getPerfil());
    } catch (Exception erro) {
        JOptionPane.showMessageDialog(null, "Erro ao cosultar usuario: " + erro);
    }
}

O erro está dando nesta sua linha:

UsuarioDto usuario = usuarioDao.consultarUsuario(funcId);

o metodo consultarUsuario na classe usuarioDAO, coloquei como:

public ResultSet consultarUsuario(int funcId)

retornando rs; que é uma variavel do tipo ResultSet rs;
Lucas_Camara

O problema é esse. O método consultarUsuario não pode retornar ResultSet, mas um UsuarioDto.

Tem uma resposta minha que eu deixei um exemplo de como pegar os dados do ResultSet e converter para UsuarioDto.

J

" Tem uma resposta minha que eu deixei um exemplo de como pegar os dados do ResultSet e converter para UsuarioDto .">>>>Ok, mas as unicas dicas sao essas…

Lucas_CamaraHabitual

1

10d

Em vez de passar o UsuarioDto como parâmetro no método consultarUsuario . Faça o método retornar um UsuarioDto e receber o ID do funcionário como parâmetro. Assim:

public UsuarioDto consultarUsuario(int idFuncionario) {
}

Após fazer essa alteração, execute sua aplicação no modo debug e inspecione o valor retornado pelo método consultarUsuario da classe UsuarioDAO , e veja se os valores estão sendo retornados corretamente do banco de dados.

J

" Tem uma resposta minha que eu deixei um exemplo de como pegar os dados do ResultSet e converter para UsuarioDto .">>>>Ok, mas as unicas dicas sao essas…

" Essa agora está mais fácil. Com o UsuarioDto retornado do método consultarUsuario devidamente preenchido, agora basta vc chamar os métodos de cada campo setando o valor neles. Ex.:

txtUsuario.setText(usuarioDto.getUsuario());
Lucas_Camara

Essa aqui:

O método recebe o ID e devolve um UsuarioDto.

public UsuarioDto consultarUsuario(int funcId) {
    String sql = "SELECT * FROM tbUsuarios WHERE iduser = ?";

    // chama modulo de conexao
    conexao = new ModConexaoDAO().conector();

    try {
        pst = conexao.prepareStatement(sql);
        pst.setInt(1, funcId);
        rs = pst.executeQuery();

        // verifica se o resultset possui dados
        if (rs.next()) {
            UsuarioDto objUsuarioDTO = new UsuarioDto();
            objUsuarioDTO.setUsuario(rs.getString("NOME_DA_COLUNA"));

            System.out.println(" o nome do usuario retornado no DAO é: " + objUsuarioDTO.getUsuario());
            return objUsuarioDTO;
        } else {
            System.out.println("Nenhum resultado encontrado para o ID " + funcId);
            return null;
        }
    } catch (Exception erro) {
        JOptionPane.showMessageDialog(null, "Erro consultar usuario: " + erro);
        return null;
    } finally {
        // feche aqui a conexão, o preparedStatement e o resultSet
    }
}
J

Essa agora está mais fácil. Com o UsuarioDto retornado do método consultarUsuario devidamente preenchido, agora basta vc chamar os métodos de cada campo setando o valor neles. Ex.:

" Para usar os dados do usuário na view, basta obter o UsuarioDto retornado pelo método consultarUsuario :

UsuarioDto objUsuarioDTO = objUserDAO.consultarUsuario(funcId);
// aqui vc pega os atributos do usuario e seta nos campos da tela
J

Huffffffffffffffffffffff, nossa enfim funcionou. Obrigado pela paciência. essa linha receber o retorno do metodo objUsuarioDAO.consultarUsuario(funcId), como já mencionado. Porem quem está passando funcId para o metodo public UsuarioDto consultarUsuario (int idFunc)? É essa mesma linha >>objUsuarioDAO.consultarUsuario(funcId)<< que passa e aomesmo tempo recebe o funcId digitado pelo usuario??

Lucas_Camara

Quem está passando o funcId como parâmetro é o método consultar da sua view.

Isso mesmo. Essa parte:

UsuarioDto usuario = objUsuarioDAO.consultarUsuario(funcId);

está enviando o funcId para o método consultarUsuario, e está recebendo um UsuarioDto como retorno.


Pense numa classe Calculadora, que tem um método soma. Esse método soma recebe 2 números e devolve a soma deles. O código ficaria assim:

public class Calculadora {

    public int somar(int a, int b) {
      return a + b;
    }
}

e para chamar e recuperar o retorno:

public class TestaCalculadora {

  public static void main(String args[]) {
    Calculadora calculadora = new Calculadora();

    // Invoca o método soma passando 2 números e recebe o valor calculadora
    int valorSomado = calculadora.somar(10, 20);

    System.out.println("O valor da soma é " + valorSomado);
  }
}
J
Opa boa tarde!! Ah sim agora entendi.

Ao que aprendemos em programação o processamento é feito linha por linha sequencialmente. Por isso me confundi na execução dessa linha

UsuarioDto usuario = objUsuarioDAO.consultarUsuario(IdFunc);

na forma sequencial pensei que primeiro deveria enviar IdFunc para o método

objUsuarioDAO.consultarUsuario(IdFunc); instanciando a classe UsuarioDAO objUsuarioDAO = new UsuarioDAO();

// Obtém o ID do usuário informado na tela

int IdFunc = Integer.parseInt(txtUsuarId.getText());
// Cria o DAO para recuperar os dados do usuário
    UsuarioDAO objUsuarioDAO = new UsuarioDAO();
    objUsuarioDAO.consultarUsuario(funcId);
e somente depois de executar o método

public UsuarioDto consultarUsuario (int idFunc)

é que poderia executar a linha

UsuarioDto usuario = objUsuarioDAO.consultarUsuario(funcId);

recebendo os dados para UsuarioDto na variavel usuario
Criado 5 de agosto de 2021
Ultima resposta 17 de ago. de 2021
Respostas 40
Participantes 3