Boa tarde pessoal. Estou com um problema que está me tirando o sono! Normalmente desenvolvo meus programa com o Banco de Dados PostgreSQL, mas dessa vez decidi fazer um programa com o Banco de Dados Embarcado, Utilizando o JavaDB (Apache Derby). Estou utilizando a IDE Netbeans 7.1 e a versão do Derby é a 10.x. A aplicação está conectando ao banco de dados e está salvado os registros corretamente. Meu problema está na hora de mostrar esses registros em JTables (Telas de Cadastros e Grids de Consultas). O código que estou utilizando é exatamente igual ao que utilizava no PostgreSQL, sem nenhuma alteração, mas não está funcionando com o JavaDB. Segue abaixo algumas linhas do código que estou julgando serem suficientes para um veredicto dos mais expertes.
// Tela Principal
// Variáveis Globais
List<PacientesBean> pacientes;
DefaultTableModel tmPacientes = new DefaultTableModel(null, new String[]{"Nome", "Telefone", "Celular", "E-mail"}) {
public boolean isCellEditable(int row, int col) {
return false;
}
};
// No Construtor Após initComponents() -- NetBeans IDE
buscaRegistroPacientes();
// Métodos
private void buscaRegistroPacientes() {
PacientesControl pc = new PacientesControl();
pacientes = pc.listarPacientes("% " + tfBuscaPaciente.getText() + " %");
mostrarPacientes(pacientes);
}
// Mostra o Resultado da Consulta na JTable
private void mostrarPacientes(List<PacientesBean> pacientes) {
tbPacientes.getColumnModel().getColumn(0).setPreferredWidth(90);
tbPacientes.getColumnModel().getColumn(1).setPreferredWidth(30);
tbPacientes.getColumnModel().getColumn(2).setPreferredWidth(30);
tbPacientes.getColumnModel().getColumn(3).setPreferredWidth(50);
while (tmPacientes.getRowCount() > 0) {
tmPacientes.removeRow(0);
}
if (pacientes.size() == 0) {
//JOptionPane.showMessageDialog(this, "Nenhum Paciente Encontrado!");
} else {
}
String[] campos = new String[]{null, null, null, null};
for (int i = 0; i < pacientes.size(); i++) {
tmPacientes.addRow(campos);
tmPacientes.setValueAt(pacientes.get(i).getNome(), i, 0);
tmPacientes.setValueAt(pacientes.get(i).getTelefone(), i, 1);
tmPacientes.setValueAt(pacientes.get(i).getCelular(), i, 2);
tmPacientes.setValueAt(pacientes.get(i).getEmail(), i, 3);
}
}
// PacientesControl
PacientesBean pb;
PreparedStatement pstm;
ResultSet rs;
String consultaRegistro = "select * from pacientes where nome like ? order by nome";
public List<PacientesBean> listarPacientes(String nome) {
List<PacientesBean> pacientes = new ArrayList();
ConexaoBD con = new ConexaoBD();
try {
pstm = con.conecta().prepareStatement(consultaRegistro);
pstm.setString(1, nome);
rs = pstm.executeQuery();
while (rs.next()) {
pb = new PacientesBean();
pb.setId(rs.getInt("id"));
pb.setNome(rs.getString("nome"));
pb.setData_cadastro(rs.getDate("data_cadastro"));
pb.setData_nascimento(rs.getDate("data_aniversario"));
pb.setSexo(rs.getString("sexo"));
pb.setEndereco(rs.getString("endereco"));
pb.setBairro(rs.getString("bairro"));
pb.setCidade(rs.getString("cidade"));
pb.setTelefone(rs.getString("telefone"));
pb.setCelular(rs.getString("celular"));
pb.setEmail(rs.getString("email"));
pb.setEscolaridade(rs.getString("escolaridade"));
pb.setProfissao(rs.getString("profissao"));
pb.setSocial(rs.getString("condicao_social"));
pacientes.add(pb);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Não Existe Registro!");
e.printStackTrace();
} finally{
con.desconecta();
}
return pacientes;
}
// ConexaoBD
public class ConexaoBD {
final private String driver = "org.apache.derby.jdbc.EmbeddedDriver";
final private String url = "jdbc:derby:atenfar";
final private String usuario = "root";
final private String senha = "root";
Statement stm;
ResultSet rs;
private Connection con;
public Connection conecta()
{
try
{
Class.forName(driver);
con = DriverManager.getConnection(url, usuario, senha);
//JOptionPane.showMessageDialog(null, "Conectado ao Banco de Dados!");
}
catch (ClassNotFoundException Driver)
{
JOptionPane.showMessageDialog(null, "Falha na Conexão com o Banco de Dados!");
Driver.printStackTrace();
}
catch (SQLException Fonte)
{
JOptionPane.showMessageDialog(null, "Erro de Conexão!");
Fonte.printStackTrace();
}
return con;
}
public void desconecta()
{
boolean result = true;
try
{
con.close();
//JOptionPane.showMessageDialog(null, "Conexão Fechada!");
}
catch (SQLException erroSQL)
{
JOptionPane.showMessageDialog(null, "Não Foi Possíve Fechar o Banco de Dados!");
result = false;
}
}
public void executeSQL (String sql){
try{
stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stm.executeQuery(sql);
}catch (Exception ex){
JOptionPane.showMessageDialog(null, "Erro ao Executar o Comando!");
ex.printStackTrace();
}
}
}
Devo aqui salientar que o List pacientes no método mostrarPacientes() está retornando size == 0. O mesmo problema está atingindo todos os outros cadastros do sistema. Nenhuma consulta é mostrada nas JTables, mas os dados estão lá, salvos no banco de dados. Alguém tem alguma sugestão de qual pode ser o erro? Obrigado a todos que puderem aljudar.