Table Acrescentando 2 Linhas

Estou fazendo uma pesquisa no BD e mostrando os resultados da pesquisa dentro de uma table, com o seguinte código:


private void Consulta() {
        ConsultaBD consultaBD = new ConsultaBD();
        String nome = tf_aluno.getText();
        listaAlunos = consultaBD.consultaAlunos(nome);

         int numeroLinhas = tbl_alunos.getRowCount();
        for (int i = 0; i < numeroLinhas; i++) {
            tableModelAluno.removeRow(0);
        }
         for (int i = 0; i < listaAlunos.size(); i++) {
            tableModelAluno.insertRow(i, new Object[]{listaAlunos.get(i).getId()
                    
                    });
        }

    }

A consulta se realiza normalmente, mostra os resultados na table sem nenhum erro, só que a table ta acrescentando duas linhas com os mesmo dados.
E o código ta igual o da minha outra table que aprenseta os dados normal, da uma olhada ia pra ver se alguem acha algo de errado, to ficando louco já. Vlw ai galera ;D

[quote=JavaPB]Estou fazendo uma pesquisa no BD e mostrando os resultados da pesquisa dentro de uma table, com o seguinte código:


private void Consulta() {
        ConsultaBD consultaBD = new ConsultaBD();
        String nome = tf_aluno.getText();
        listaAlunos = consultaBD.consultaAlunos(nome);

         int numeroLinhas = tbl_alunos.getRowCount();
        for (int i = 0; i < numeroLinhas; i++) {
            tableModelAluno.removeRow(0);
        }
         for (int i = 0; i < listaAlunos.size(); i++) {
            tableModelAluno.insertRow(i, new Object[]{listaAlunos.get(i).getId()
                    
                    });
        }

    }

A consulta se realiza normalmente, mostra os resultados na table sem nenhum erro, só que a table ta acrescentando duas linhas com os mesmo dados.
E o código ta igual o da minha outra table que aprenseta os dados normal, da uma olhada ia pra ver se alguem acha algo de errado, to ficando louco já. Vlw ai galera ;D[/quote]

acho q ta nessa linha:
tableModelAluno.removeRow(0);

tenta colocar i no lugar do 0.

se vc quiser limpar a tabela toda, use table.setNumRows(0); que limpa de uma so vez

Tem certeza que a query não está duplicando dados?

mauricioadl, coloquei i no lugar do 0 e continuou aparecendo dois dados iguais. Tentei usar o table.setNumRows(0); e tbm deu o msm erro.

drsmachado o método consulta é o seguinte:

 public List<Alunos> consultaAlunos(String nome) {
        List<Alunos> listaAlunos = new ArrayList<Alunos>();
        Alunos alunos;
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(consultaAlunoNome);
            nome = "%" + nome + "%";
            ps.setString(1, nome);
            rs = ps.executeQuery();

            while (rs.next()) {
                alunos = new Alunos();
                alunos.setId(rs.getInt("id"));
                alunos.setNome(rs.getString("nome"));
                alunos.setTurma(rs.getString("turma"));
                alunos.setNumero(rs.getString("numero"));
                alunos.setCelular(rs.getString("celular"));
                alunos.setEmail(rs.getString("email"));
                alunos.setEndereco(rs.getString("endereco"));
                alunos.setBairro(rs.getString("bairro"));
                alunos.setCidade(rs.getString("cidade"));
                listaAlunos.add(alunos);

            }
            acessoBD.desconectar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaAlunos;
    }

Creio eu que não tenha nada de errado, mais confere, as vezes a gente nem ve o erro.

coloca isso dentro do while() do seu select

Alunos alunos = new Alunos();

Então.
A questão é que, dependendo da query de consulta, pode ocorrer de dados virem duplicados.

Você postou o código, mas esqueceu de informar qual a string consultaAlunoNome.

Realize a query direto no banco de dados e verifique se ele duplica resultados.

A Query “ConsultaAlunoNome” é a seguinte :

private String ConsultaAlunoNome = "select * from cad_aluno where cad_aluno.nome like ?";

Então, pega ela, troca o ? por um nome que esteja lá e roda direto no banco.
Se ele não duplicar, você já sabe que o problema está a partir do resultset até a tabela, aí, debugando, conseguirá identificar onde ele duplica.
Caso traga duplicado, então precisa refinar tua query (group by, por exemplo).

Outra coisa, embora seja em ambiente específico “select *” não deve ser utilizado, a não ser que queira matar o banco de dados.

acontece que essa query pode voltar mais de um contato igual, dae vc pensa que esta duplicando mas na verdade o banco esta trazendo valores iguais porque sua consulta ta pedindo isso.

Vc colocou o Alunos alunos = new Alunos(); dentro do while?

Maurício, da forma como o while está, a cada novo resultado, o objeto aluno é instanciado “zerado”.
Qual a razão de invocar e instanciar ali, se terá o mesmo efeito?

Coloquei sim mauricioadl, e não tem dados duplicados dentro da tabela.

drsmachado fiz o teste que vc falo dentro do banco de dados e ele não me trousse dados duplicados, no caso a query ta correta.

Vou tentar aqui’

Ok, então precisa debugar a aplicação e ir verificando, método a método em que lugar o registro duplica.

private void Consulta() {
        ConsultaBD consultaBD = new ConsultaBD();
        String nome = tf_aluno.getText();
        listaAlunos = consultaBD.consultaAlunos(nome);

	tableModelAluno.setNumRows(0); //limpa a tabela
         
         for (int i = 0; i < listaAlunos.size(); i++) {
            tableModelAluno.addRow(new Object[]{listaAlunos.get(i).getId()});
        }

    }
 public List<Alunos> consultaAlunos(String nome) {
        List<Alunos> listaAlunos = new ArrayList<Alunos>();
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(consultaAlunoNome);
            nome = "%" + nome + "%";
            ps.setString(1, nome);
            rs = ps.executeQuery();

            while (rs.next()) {
                Alunos alunos = new Alunos();
                alunos.setId(rs.getInt("id"));
                alunos.setNome(rs.getString("nome"));
                alunos.setTurma(rs.getString("turma"));
                alunos.setNumero(rs.getString("numero"));
                alunos.setCelular(rs.getString("celular"));
                alunos.setEmail(rs.getString("email"));
                alunos.setEndereco(rs.getString("endereco"));
                alunos.setBairro(rs.getString("bairro"));
                alunos.setCidade(rs.getString("cidade"));
                listaAlunos.add(alunos);

            }
            acessoBD.desconectar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaAlunos;
    }

Duplica da mesma maneira Mauricio

faz como o amigo disse, tenta debuggar pra ver onde duplica.

Debuge o seu código. Veja qual é a sentença SQL que está sendo gerada, e execute-a em seu editor do BD.
Caso haja erro nela, você a corrige ali mesmo e mude no seu código.

Outra coisa:
PELO AMOR DE DEUS, ESQUECE ESSE DEFAULTTABLEMODEL!

Se você criasse o seu próprio modelo de dados, você não precisaria fazer desse jeito pra limpar a sua JTable, pra adicionar novas linhas, além de que você irá trabalhar com seus objetos de negócio, e não com arrays do tipo Object. Vale a pena dar uma conferida! [vide abaixo minha assinatura]

Abraços!