Dúvida ao carregar JTable (rs.next)

Tudo bem pessoal?
Gostaria de saber se alguém poderia me explicar se estou fazendo algo errado. Tenho um código para preencher uma jTable, porém preciso saber se existe registro na query consultada no MySql.
O problema ocorre quando utilizo a verificação (rs.next) através do if, o retorno é verdadeiro porém não carrega o único registro do BD.
Fazendo muitos testes, verifiquei que não carrega na jTable o primeiro registro encontrado na Query e quando é apenas um, a jTable fica vazia.
Segue abaixo meu código:

public void preencherTabela(String sql) {
    conexao.conectarBd();
    try {
        pst = conexao.conector.prepareStatement(sql);
        rs = pst.executeQuery();
        //if (rs.next()) {
            // A linha abaixo usa a biblioteca rs2xml.jar para preencher a tabela
            jTableAgenda.setModel(DbUtils.resultSetToTableModel(rs));
            jButtonAtenderAg.setEnabled(true);
        //}

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao preencher tabela!" + ex);
    }
    conexao.desconectarBd();
}

Quando executo assim traz um registro, porém quando “descomento” o IF não traz nada!
Agradeço desde já!

Acho que o teste certo a se utilizar seria utilizando o first(), vou te mostrar um exemplo abaixo, sempre utilizei desta forma!

if (rs.fisrt()) { //Testa se existe algum registro na primeira posição do rs
   while (rs.next()) { //Se o teste for true preencha a table enquanto houver registros
       //Preenche a table
   }
}

Primeiramente obrigado Jonathan pela atenção!

Fiz um teste desta maneira e continua ocorrendo. Utilizando a mesma query no MySql e NetBeans veja o que acontece:

select ageid ID, pacnome Paciente, ageturno Turno, nomemed Médico, date_format(agedata,’%d/%m/%Y’)Data,
agestatus Status from tbagenda
inner join tbpaciente on ageidpac=pacid
inner join tbmedico on ageidmed=idmed
where agedata = '2017-09-15’and agestatus = ‘Aberto’;

Retorno pelo MySql
ID,Paciente,Turno,Médico,Data,Status
2,“Marcos Alvin de Campos”,Noite,“José Luiz”,15/09/2017,Aberto
4,“Marcos Alvin de Campos”,Noite,“Paulo Campos”,15/09/2017,Aberto
5,“João Carlos Santos”,Tarde,“Carlos Henrique”,15/09/2017,Aberto
6,“Antonio João da Silva”,Noite,“Carlos Henrique”,15/09/2017,Aberto

Retorno pelo NetBeans na jTable (sempre não traz o primeiro registro)
4 Marcos Alvin de Campos Noite Paulo Campos 15/09/2017 Aberto
5 João Carlos Santos Tarde Carlos Henrique 15/09/2017 Aberto
6 Antonio João da Silva Noite Carlos Henrique 15/09/2017 Aberto

Segue o método:
public void preencherTabela(String sql) {
conexao.conectarBd();
try {
pst = conexao.conector.prepareStatement(sql);
rs = pst.executeQuery();
DefaultTableModel model = (DefaultTableModel)jTableAgenda.getModel();
model.setNumRows(0);
if (rs.first()) {
jButtonAtenderAg.setEnabled(true);
while (rs.next()) {
model.addRow(new Object[]{
//retorna os dados da tabela do BD, cada campo e um coluna.
rs.getString(“ID”),
rs.getString(“Paciente”),
rs.getString(“Turno”),
rs.getString(“Médico”),
rs.getString(“Data”),
rs.getString(“Status”),});
}
} else {
JOptionPane.showMessageDialog(null, “Não existem agendamentos para hoje!”);
jButtonAtenderAg.setEnabled(false);
}

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao preencher tabela!" + ex);
    }
    conexao.desconectarBd();

Sinceramente não dá para entender!
Abraços!

Realmente é cabuloso, faz um teste aí para desencargo de consciência faz uma alteração, deixando da seguinte forma:

if (rs.fisrt()) { //Testa se existe algum registro na primeira posição do rs
   while (rs.next()) { //Se o teste for true preencha a table enquanto houver registros
       //Preenche a table
   }
   rs.first(); //Adiciona essa linha ao sair do loop
}

Obrigado Jonathan!
Desisti, to quase um dia nisso!
Vou validar pela jTable:

public void preencherTabela(String sql) {
conexao.conectarBd();
conexao.executaSql(sql); //método criado no ModuloCoenxao()
jTableAgenda.setModel(DbUtils.resultSetToTableModel(conexao.rs));
if (jTableAgenda.getRowCount() > 0){
“preenche a tabela”;
} else {

        JOptionPane.showMessageDialog(null, "Não registro!");
    }
    conexao.desconectarBd();
}

Abraços!

1 curtida

\o que vc precisa esta ai meu amigo//

 private void pesquisar_cliente() {
        String sql = "select * from tbclientes where nomecli like ?";
        try {
            pst = conexao.prepareStatement(sql);
            //passando o conteudo da caixa de pesquisa o ?
            //atenção ao "%" continuacao da String sql
            pst.setString(1, txtClipesquisa.getText() + "%");
            rs = pst.executeQuery();
            //a linha abaixo usa a biblioteca
            tblClientes.setModel(DbUtils.resultSetToTableModel(rs));

        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
    //metodo para setar os campos do formulario com o conteudo da tabela

    public void setar_campos() {
        int setar = tblClientes.getSelectedRow();
        txtCliid.setText(tblClientes.getModel().getValueAt(setar, 0).toString());
        txtCliNome.setText(tblClientes.getModel().getValueAt(setar, 1).toString());
        txtCliendereco.setText(tblClientes.getModel().getValueAt(setar, 2).toString());
        txtClitelefone.setText(tblClientes.getModel().getValueAt(setar, 3).toString());
        txtCliemail.setText(tblClientes.getModel().getValueAt(setar, 4).toString());
        txtCliCidade.setText(tblClientes.getModel().getValueAt(setar, 5).toString());
        txtCliBairro.setText(tblClientes.getModel().getValueAt(setar, 6).toString());
        cboUfcli.setSelectedItem(tblClientes.getModel().getValueAt(setar, 7).toString());
        txtCepcli.setText(tblClientes.getModel().getValueAt(setar, 8).toString());

        //a linha a baixo desabilita o botão adicionar
        btnAdicionar.setEnabled(false);

    }