Erro ao setar valores em uma jtable com dados vindos de um banco de dados com resultset

Boa noite!
Porque está dando erro?

try {
            pstm = conexao.conectar().prepareStatement(sql);
            rst = pstm.executeQuery();
            while (rst.next()) {
                tmDados.setValueAt(rst.getInt("fatura"), 1, 0);
                tmDados.setValueAt(rst.getString("data"), 1, 1);
                tmDados.setValueAt(rst.getDate("datavencimento"), 1, 2);
                tmDados.setValueAt(rst.getFloat("valor"), 1, 3);
                tmDados.setValueAt(rst.getString("paga"), 1, 4);
            }
        } catch (SQLException ex) {
            Logger.getLogger(BaixaPagamentos.class.getName()).log(Level.SEVERE, null, ex);
        }

stacktrace:

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:665)
at br.com.erp.baixa.BaixaPagamentos.mostrarDados(BaixaPagamentos.java:84)
at br.com.erp.baixa.BaixaPagamentos.btnBuscarActionPerformed(BaixaPagamentos.java:313)
at br.com.erp.baixa.BaixaPagamentos.access$000(BaixaPagamentos.java:24)
at br.com.erp.baixa.BaixaPagamentos$2.actionPerformed(BaixaPagamentos.java:230)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

a linha 84 do baixapagamentos é a

tmDados.setValueAt(rst.getInt(“fatura”), 1, 0);

Alguem pode me ajudar?
Obrigado!

Sinceramente o pessoal vai ver que você está usando DefaultTableModel e vai vazar do tópico ou te criticar rsrs… Mas com razão

Algumas coisas que pude ver olhando meio por cima do seu código:
1) Você está usando DefaultTableModel (tem N tópicos aqui que explicam as deficiências e desvantagens de usá-lo, não vou repeti-las aqui)…
2) Você está chamando setValueAt diretamente (isso não é recomendado pois a JTable o chama internamente, assim como o método getValueAt)
3) Não há uma camada ou até mesmo uma classe que separe os seus dados (basicamente seu resultSet) da sua view, e isso torna seu sistema não-escalável, desorganizado e muitas vezes pouco legível e intuitivo.
4) Seu código não está orientado à objetos… Crie uma classe Fatura ou Parcela (seja lá o que você está representando) e lide com instâncias dessa classe. Tente imaginar que você está lidando objetos e não com “colunas” ou “valores”.

Sem querer ser chato, eu começaria ajeitando isso primeiro…

Rafael,

Aqui eu crio minha tabela

private void criaTabelaClienteApolice() {
        tmclienteapolice = new DefaultTableModel();      
        tbclienteapolice = new JTable(tmclienteapolice){
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
           }
        };
        
	tmclienteapolice.addColumn("NOME");
	tmclienteapolice.addColumn("APÓLICE");
        tmclienteapolice.addColumn("STATUS");

        tbclienteapolice.getColumnModel().getColumn(0).setPreferredWidth(240);
	tbclienteapolice.getColumnModel().getColumn(1).setPreferredWidth(90);
        tbclienteapolice.getColumnModel().getColumn(2).setPreferredWidth(90);

        JScrollPane scroll = new JScrollPane();
	scroll.setViewportView(tbclienteapolice);
	scroll.setBounds(7,20,405,200);
	panelTabela.add(scroll);

Aqui o método para popular a JTable


public void contratoCliente(Object id){
        Connection conn;
        PreparedStatement ps;
        ResultSet rs;
        ResultSetMetaData rsmd;
        int coluna;
        
        Object outccliente[];
        String select = 
                "SELECT NOME, APOLICE, STATUS FROM CLIENTE";
        
        try{
            conn = ConnectionManager.getConexao();
            ps = conn.prepareStatement(select);
            ps.setObject(1, id);
            rs = ps.executeQuery();
            
            rsmd = rs.getMetaData();
            coluna = rsmd.getColumnCount();
            outccliente = new Object[coluna];
            
             while(rs.next()){
                 for(int i = 1; i <= coluna; i++){
                    outccliente[i-1] = rs.getObject(i);
                }
                 tmclienteapolice.addRow(outccliente);
             }               
        }catch(SQLException e){
            JOptionPane.showMessageDialog(null, "CONTRATO CLIENTE \n " + e, "CRASSUS", JOptionPane.ERROR_MESSAGE);
        }
    }

Espero ter ajudado,