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?
@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.
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());
}
}
@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.
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|
Já vi seu problema, você está inserindo o endereço duas vezes
Rapaz…eu queimei tanto nerônio que essa passou despercebido…kkkkkk
Muito obrigado pela ajuda e atenção!
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.
Valeu meu Brother, vou fazer isso…abraço!