Possuo o Código abaixo para preencher uma jTable
private void preecheTabelaMedico() {
tbMedicos.getColumnModel().getColumn(0).setPreferredWidth(150); //Médico (Nome)
tbMedicos.getColumnModel().getColumn(1).setPreferredWidth(50); // CRM
tbMedicos.getColumnModel().getColumn(2).setPreferredWidth(50); // UF
String sql = "select medicos.nome as nome, mestre.crm as crm, mestre.uf as uf from mestre, medicos "
+ "where mestre.codmedico = medicos.codigo "
+ "and mestre.codcliente=" + tfCodPaciente.getText().trim() + " "
+ "order by mestre.id";
try {
con_mestre.conecta();
con_mestre.executeSQL(sql);
pacientes = new ArrayList();
PacienteBean pb;
while (con_mestre.rs.next()) {
pb = new PacienteBean();
pb.setNomemedico(con_mestre.rs.getString("nome"));
pb.setCrm(con_mestre.rs.getString("crm"));
pb.setUf(con_mestre.rs.getString("uf"));
pacientes.add(pb);
for(int i=0; i<pacientes.size(); i++)
System.out.println(pacientes.size());
tmMedicos.addRow(new String[]{con_mestre.rs.getString("nome"),
con_mestre.rs.getString("crm"),
con_mestre.rs.getString("uf")});
}
con_mestre.desonecta();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Nenhum Médico Cadastrado.");
}
}
Quando faço uma busca pelos registros do banco de dados o meu retorno (System.out.println(pacientes.size())) no console do Netbeans e o seguinte
run:
1
2
2
3
3
3
Achei estranho o fato do índice 2 se repetir 2x e o índice 3 se repetir 3x.
Porém, quando tento atualizar os registros na table e consequentemente no banco de dados através dos códigos abaixo
private void btAlterarMedicoActionPerformed(java.awt.event.ActionEvent evt) {
if (tbMedicos.getSelectedRow() != -1) {
alteraMedico();
while (tmMedicos.getRowCount() > 0) {
tmMedicos.removeRow(0);
}
preecheTabelaMedico();
tfCodMedico.setText("");
tfCodMedico.requestFocus();
tfNomeMedico.setText("");
tfEspecialidade.setText("");
tfCRM.setText("");
tfUF.setText("");
tfIdMedico.setText("");
} else {
JOptionPane.showMessageDialog(this, "Selecione um Registro da Tabela!");
}
private void alteraMedico() {
PacienteControl pc = new PacienteControl();
PacienteBean pb = new PacienteBean();
pb.setId_mestre(Integer.parseInt(tfIdMedico.getText()));
pb.setCodcliente(Integer.parseInt(tfCodPaciente.getText()));
pb.setCodmedico(Integer.parseInt(tfCodMedico.getText()));
pb.setCrm(tfCRM.getText());
pb.setUf(tfUF.getText());
pc.alterarMestre(pb);
}
String alteraMestre = "update mestre set codmedico=?, crm=?, uf=? where "
+ "codcliente=? and id=?";
public void alterarMestre(PacienteBean pas) {
ConexaoBD con = new ConexaoBD();
try {
pstm = con.conecta().prepareStatement(alteraMestre);
pstm.setInt(1, pas.getCodmedico());
pstm.setString(2, pas.getCrm());
pstm.setString(3, pas.getUf());
pstm.setInt(4, pas.getCodcliente());
pstm.setInt(5, pas.getId_mestre());
pstm.executeUpdate();
JOptionPane.showMessageDialog(null, "Registro Alterado com Sucesso!");
con.desonecta();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Não Foi Possível Alterar o Registro!");
e.printStackTrace();
}
}
O meu retorno (System.out.println(pacientes.size())) no console do NetBeans é apenas o índice 1 do arrayList, tanto que a atualização de minha tabela somente mostra o primeiro registro do banco de dados e não, todos os registros do banco de dados como deveria ser. Onde é que eu estou errando?