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,