JTable

Boas ppl,
Estou utilizando um JTable pra mostrar os dados de uma bd, porem esta-me dando um erro que nao consigo resolver:
Eu estou utilizando o NetBeans, e adiciono o JTable arrantando o control.

public void popularTabela()
    {
        try
        {
            Conexao cn = new Conexao();
            cn.setUser(txtUser.getText().toString());
            cn.setPass(txtPass.getText().toString());
            String sql = "select * from "+txtTabela.getText().toString()+"";
            cn.abrirConexao();
            java.sql.Statement st = cn.getConn().createStatement();
            ResultSet rs = st.executeQuery(sql);
            String[] columnNames = {"a","b","c","d"};
            int rowNum = 0;
            int numColumns = 4;

            Object[][] data = new Object[][]{};
            DefaultTableModel model = new DefaultTableModel(data,columnNames);
            if (rs != null)  if rs == null, then there is no ResultSet to view
            {
                while ( rs.next() )
                {
						//O erro acontece por alguma coisa aqui
                        data[rowNum][0] = rs.getString(1);
                        data[rowNum][1] = rs.getString(3);
                        data[rowNum][2] = rs.getString(4);
                        data[rowNum][3] = rs.getString(8);
                        model.addRow(data);
                    rowNum++;
                }
            }
            
            rs.close();
            st.close();
            cn.fecharConexao();

            jt = new JTable(model);
            jt.setAutoCreateColumnsFromModel(false);
            jt.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_NEXT_COLUMN);
            jt.setShowHorizontalLines(true);
            jt.setGridColor(java.awt.SystemColor.control);
            jt.setShowGrid(true);
            jt.setModel(model);
            jt.createDefaultColumnsFromModel();
            JScrollPane jsp = new JScrollPane(jt);
            getContentPane().add(jsp, BorderLayout.CENTER);
            jt.setVisible(true);             
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }
    }

O Erro que estou obtendo é: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0

Será que alguem me pode ajudar.

Atentamente
Graveyard

Acho que o problema esta aqui :

Object[][] data = new Object[][]{};

Vc nao esta difinindo o tamanho do array, por isso da o erro.
Faz o seguinte teste, define as dimensoes do array, tipo [numero de registros do ResultSet +1][5]

//Daniel

Este erro é quando o seu sistema está tentando acessar uma posição do array que não existe

Pq vc nao faz a consulta e joga ela num Vector
depois varre o vetor com um for por ex, para preencher as linhas da tabela…

por ex assim

for (int i = 0; i < vTabela.size(); i++) {
    Associado assoT = (Associado) vTabela.get(i);
    Vector linha = new Vector();
    linha.add(assoT.getCodAssociado());
    linha.add(assoT.getNomeAssociado());
    tabelaModelo.addRow(linha);
}

Aí, fera…
Eu faço o que você quer fazer mais ou menos como o amigo RobsonFagundes disse…
Segue um exemlo de como eu faço…

private void atualizarTabela() { DefaultTableModel modeloTabela = (DefaultTableModel) jTable1; jTable1.setModel(modeloTabela); modeloTabela.setRowCount(0); try { conexao.conectar(); stmt = conexao.con.createStatement(); rs = stmt.executeQuery("Select Nome_Prof from Profissoes " + "where Status = 'ATIVO' order by Nome_Prof"); while (rs.next()) { String[] dados = new String[1]; // vetor com a quantidade de campos retornados da consulta... dados[0] = rs.getString("Nome_Prof"); modeloTabela.addRow(dados); // adiciona o conteúdo do vetor à JTable... } rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } finally { conexao.desconectar(); } }
Um abraço!

[quote=RobsonFagundes]por ex assim

for (int i = 0; i < vTabela.size(); i++) { Associado assoT = (Associado) vTabela.get(i); Vector linha = new Vector(); linha.add(assoT.getCodAssociado()); linha.add(assoT.getNomeAssociado()); tabelaModelo.addRow(linha); } [/quote]

Vector? Argh!!!

Use:

List<Associado> linha = new ArrayList<Associado>(); ou então List<Associado> linha = new LinkedList<Associado>();


victorwss qual a vantagem q vou ter com ArrayList ???

[quote=victorwss][quote=RobsonFagundes]por ex assim

for (int i = 0; i < vTabela.size(); i++) { Associado assoT = (Associado) vTabela.get(i); Vector linha = new Vector(); linha.add(assoT.getCodAssociado()); linha.add(assoT.getNomeAssociado()); tabelaModelo.addRow(linha); } [/quote]

Vector? Argh!!!

Use:

List<Associado> linha = new ArrayList<Associado>(); ou então List<Associado> linha = new LinkedList<Associado>();[/quote]

[quote=RobsonFagundes]
victorwss qual a vantagem q vou ter com ArrayList ???

[/quote]

Desempenho principalmente. O Vector estava sendo criado com um escopo local a um método e nunca era compartilhado por várias Threads, logo a sincronização que ele tem é desnecessária. Eliminando-se esta sincronização se tem um grande aumento de desempenho.

Há outras questões também acerca de Vector e Hashtable que fazem com que elas sejam consideradas Collections legadas, e como legadas, é desencorajado o seu uso. Na verdade a Sun tem uma grande vontade de colocar @Deprecated nelas e esquecê-las para sempre, mas existem alguns poucos casos raros onde o uso de Vector ainda se justifica.

valeu ai victorwss pela dica
vou mudar maneira de preencher minhas tabelas, relatorios e talss…
Abraço

[quote=victorwss][quote=RobsonFagundes]
victorwss qual a vantagem q vou ter com ArrayList ???

[/quote]

Desempenho principalmente. O Vector estava sendo criado com um escopo local a um método e nunca era compartilhado por várias Threads, logo a sincronização que ele tem é desnecessária. Eliminando-se esta sincronização se tem um grande aumento de desempenho.

Há outras questões também acerca de Vector e Hashtable que fazem com que elas sejam consideradas Collections legadas, e como legadas, é desencorajado o seu uso. Na verdade a Sun tem uma grande vontade de colocar @Deprecated nelas e esquecê-las para sempre, mas existem alguns poucos casos raros onde o uso de Vector ainda se justifica.[/quote]

Eu também durante muito tempo usei o “Vector” para várias tarefas, mas já vi muitos comentários, lições ou dicas dizendo que melhor usar outras opções, como arrayList , list pelo desempenho proporcionado… também estou mudando minha visão sobre o Vector