jTable inicia com registros duplicados

8 respostas Resolvido
java
R

olá pessoal!
estou com um problema ao popular a minha jTable.
Em um formulário de cadastro de endereços, faço o preenchimento dos dados e salvo no banco de dados, até aí tudo bem, funciona perfeitamente, depois que o registro é salvo a jTable exibe o registro duplicado.
Digo que o método salvar eu uso ele em 02 Formulários distintos salvando na mesma tabela
No form Cadastro de Pacientes ao pesquisar o endereço, caso o endereço não exista no BD
eu chamo o método Salvar, somente no formulário de cadastro de endereços que acontece isso…alguém pode me ajudar?

8 Respostas

V

@Raigley Não estou entendo muito bem o problema, os dados estão ficando duplicados no banco de dados ou é só no momento em que são inseridos no jtable? Post os códigos que preencher o jtable e os códigos que salvam o endereço para podermos analisar.

R
Esse é o código para salvar no banco

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {

ModeloEndereco mod = new ModeloEndereco();

mod.setTipoLogradouro(txtTipoLogradouro.getSelectedItem().toString());

mod.setLogradouro(this.txtRua.getText());

mod.setCidade(this.txtCidade.getText());

mod.setBairro(this.txtBairro.getText());

mod.setEstado(this.txtEstado.getSelectedItem().toString());

mod.setCep(this.txtCep.getText());

try{

new FrmSalvarEndereco().show(true);

//Cadastra as informações na base de dados

new EnderecoBussiness().inserir(mod);

salvarDesabilitarCampos();

pesquisar();

this.btnNovo.setEnabled(true);

} catch (RuntimeException ex) {

Logger.getLogger(FrmMedicos.class.getName()).log(Level.SEVERE, null, ex);

} catch (SQLException ex) {

Logger.getLogger(FrmPacientes.class.getName()).log(Level.SEVERE, null, ex);

}

}
e esse é o da jTable

private void pesquisar() throws RuntimeException {

try {

//Constroi o objeto listModel que vai apresentar a lista de usuarios cadastrados

String[] colunas = new String[]{CÓDIGO, TIPO, LOGRADOURO, CEP, BAIRRO, CIDADE, UF};

DefaultTableModel listModel = new DefaultTableModel(colunas, 0);

List le = new EnderecoBussiness().listarendereco();

le.stream().map((e) -> {

listModel.addRow(new Object[]{

e.getIdendereco(), e.getTipoLogradouro(), e.getLogradouro(), e.getCep(), e.getBairro(), e.getCidade(), e.getEstado()

});

return e;

}).map((_item) -> {

tListaEnd.setModel(listModel);
return _item;
        }).forEachOrdered((_item) -> {
            tListaEnd.setDefaultRenderer(Object.class, new EnderecoTableRenderer());
          
        });
       
    } catch (SQLException ex) {
        Logger.getLogger(FrmCadEndereco.class.getName()).log(Level.SEVERE, null, ex);
    }
}
Esse é o que insere na jTable

public List listarendereco() throws RuntimeException, SQLException {

//Lista os usuarios cadastrados

String sql = Select idend, tipologradouro, logradouro, cep, bairro, estado, cidade from endereco order by idend;
//Variável de retorno
        List<ModeloEndereco> retorno = new ArrayList();

        PreparedStatement stmt = conexao.prepareStatement(sql);
        ResultSet res = stmt.executeQuery();
       try {
        while (res.next()) {
          
            ModeloEndereco eR = new ModeloEndereco();
            //executa o comando sql listando os usuarios              
            eR.setIdendereco(res.getInt("idend"));
            eR.setTipoLogradouro(res.getString("tipologradouro"));
            eR.setLogradouro(res.getString("logradouro"));
            eR.setCep(res.getString("cep"));
            eR.setBairro(res.getString("bairro"));
            eR.setEstado(res.getString("estado"));
            eR.setCidade(res.getString("cidade"));
            retorno.add(eR);

            retorno.add(eR);
        
        }
        return retorno;
    } catch (SQLException e) {
        throw new RuntimeException(e.getMessage());
    }
}
V

@Raigley O código está meio confuso mas não parece ter nada de errado, deve ser o código que preenche a tabela. Dê uma pesquisada diretamente no banco de dados para verificar se realmente não estão sendo salvos em duplicidade.

R

Já verifiquei e não está duplicado não, está assim…
37;“Avenida”;“Moacyr Spósito Ribeiro”;“65913-415”;“Aeroporto”;“Imperatriz”;"MA"
38;“Rodovia”;“BR - 010”;“65913-417”;“Aeroporto”;“Imperatriz”;"MA"
39;“Rodovia”;“BR - 010”;“65913-970”;“Aeroporto”;“Imperatriz”;"MA"
na jTable tá assim…
|37|Avenida|Moacyr Spósito Ribeiro|65913-415|Aeroporto|Imperatriz|MA|
|37|Avenida|Moacyr Spósito Ribeiro|65913-415|Aeroporto|Imperatriz|MA|
|38|Rodovia|BR - 010|65913-417|Aeroporto|Imperatriz|MA|
|38|Rodovia|BR - 010|65913-417|Aeroporto|Imperatriz|MA|
|39|Rodovia|BR - 010|65913-970|Aeroporto|Imperatriz|MA|
|39|Rodovia|BR - 010|65913-970|Aeroporto|Imperatriz|MA|

V
Solucao aceita

Já vi seu problema, você está inserindo o endereço duas vezes

R

Rapaz…eu queimei tanto nerônio que essa passou despercebido…kkkkkk
Muito obrigado pela ajuda e atenção!

V

Sem problemas, as vezes isto acontece…cabeça quente e muito código não combinam, se afaste um pouco e volte depois mais relaxado, pelo menos para mim isto funciona.

R

Valeu meu Brother, vou fazer isso…abraço!

Criado 1 de maio de 2018
Ultima resposta 1 de mai. de 2018
Respostas 8
Participantes 2