[Resolvido] JTable + consulta no banco de dados retornando mesmo registro

2 respostas
R

Boa noite galera!

Estou fazendo uma aplicação onde nela há uma tela de consulta, na qual o usuário pode pesquisar pelo nome.

O problema é que quando há vários registros com o mesmo nome, retorna a quantidade certa de registros porém com os dados iguais.

Por ex: Na tabela do banco há um Eduardo Dias e um Eduardo Machado, a consulta nessa caso retorna duas linhas com Eduardo Machado.

O método que monta a tabela é este:

public void montaTabela(ArrayList<Cliente> listaCliente){
        DefaultTableModel modelo = new DefaultTableModel();
        ClienteDAO cdao = new ClienteDAO();
        modelo.addColumn("ID");
        modelo.addColumn("NOME");
        modelo.addColumn("IDADE");
        modelo.addColumn("DATA NASCIMENTO");

        cdao.pesquisar(txtNomePesq.getText(), listaCliente);
        
       
        
        for(Cliente d: listaCliente){
            String[] linha = {d.getId().toString(), d.getNome(), d.getIdade().toString(), d.getDataNascimento()};
            modelo.addRow(linha);
            
        }
  
        
       
        tblPesqCliente.setModel(modelo);
    }

E o DAO de consulta é este:

public List<Cliente> pesquisar( String nome, ArrayList<Cliente> listaCliente) {
        String sql = "Select * from Cliente where NOME like '%"+nome+"%'";
        Cliente e = new Cliente();
        try {
            PreparedStatement ps = Principal.conexao.getConexao().prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                e.setId(rs.getInt("ID"));
                e.setNome(rs.getString("NOME"));
                e.setIdade(rs.getInt("IDADE"));
                e.setDataNascimento(rs.getString("DATA_NASCIMENTO"));
                listaCliente.add(e);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ClienteDAO.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null,"Erro ao recuperar cliente do banco de dados");
        }


        return listaCliente;

O erro de lógica está em algum destes métodos???

Valeu pessoal,

abraços

2 Respostas

diego.sas

Boa noite rizller.
O problema é que você esta inicializando Cliente fora do while.
O correto é.

public List<Cliente> pesquisar( String nome, ArrayList<Cliente> listaCliente) {   
        String sql = "Select * from Cliente where NOME like '%"+nome+"%'";   
        try {   
            PreparedStatement ps = Principal.conexao.getConexao().prepareStatement(sql);   
            ResultSet rs = ps.executeQuery();   
            while(rs.next()){   
               Cliente e = new Cliente();   
                e.setId(rs.getInt("ID"));   
                e.setNome(rs.getString("NOME"));   
                e.setIdade(rs.getInt("IDADE"));   
                e.setDataNascimento(rs.getString("DATA_NASCIMENTO"));   
                listaCliente.add(e);   
            }   
        } catch (SQLException ex) {   
            Logger.getLogger(ClienteDAO.class.getName()).log(Level.SEVERE, null, ex);   
            JOptionPane.showMessageDialog(null,"Erro ao recuperar cliente do banco de dados");   
        }   
  
  
        return listaCliente;
R
diego.sas:
Boa noite rizller. O problema é que você esta inicializando Cliente fora do while. O correto é.
public List<Cliente> pesquisar( String nome, ArrayList<Cliente> listaCliente) {   
        String sql = "Select * from Cliente where NOME like '%"+nome+"%'";   
        try {   
            PreparedStatement ps = Principal.conexao.getConexao().prepareStatement(sql);   
            ResultSet rs = ps.executeQuery();   
            while(rs.next()){   
               Cliente e = new Cliente();   
                e.setId(rs.getInt("ID"));   
                e.setNome(rs.getString("NOME"));   
                e.setIdade(rs.getInt("IDADE"));   
                e.setDataNascimento(rs.getString("DATA_NASCIMENTO"));   
                listaCliente.add(e);   
            }   
        } catch (SQLException ex) {   
            Logger.getLogger(ClienteDAO.class.getName()).log(Level.SEVERE, null, ex);   
            JOptionPane.showMessageDialog(null,"Erro ao recuperar cliente do banco de dados");   
        }   
  
  
        return listaCliente;

Muito obrigado!

Não acredito que fiquei o dia todo nesse erro bobo, hehehe.

Valeu,

abraços!

Criado 21 de setembro de 2010
Ultima resposta 22 de set. de 2010
Respostas 2
Participantes 2