JTAble não exibe dados do BD

3 respostas
Fiuza

Boa noite!

Estou fazendo um trabalho para a faculdade e como sempre deve ser em Java :roll:

Peguei um livro muito bom onde consegui um exemplo bem legal ( não consegui entender exatamente tudo) sobre como utilizar JTable.

Não está no formato que muitos de vocês aqui semeiam (Criando sua própria TableModel, usando List etc) mas foi o mais perto que consegui de fazer funcionar haha

Como esse trabalho tem prazo de entrega eu somente gostaria de entender o porquê de não estar aparecendo meus malditos dados! (Eu sou um péssimo programador, eu sei :lol:)

Sei que aqui no forum e na internet em geral há muito contéudo sobre JTable, mas acreditem eu procurei e não achei nada parecido com o meu problema. Só o do usuário CaioNascimento que eu pensei ser o mesmo problema que o meu, mas vi que não era =S

Bom, segue o código:

public void ProcuraArbitro(String tipo,String rg){
     Statement st;
        try{
         String sql = "SELECT * FROM ARBITRO WHERE RG"+" = "+rg;
         st = conn.createStatement();
         rsArbitro = st.executeQuery(sql);
         

         }catch(SQLException en){
             JOptionPane.showMessageDialog(null,"Erro ao fazer a consulta!");
             en.printStackTrace();
            
             
         }
     }
    

    public Vector proximoRegistro(ResultSet rs, ResultSetMetaData rsmd) throws SQLException{
        Vector linhaAtual = new Vector();
        for(int i = 1; i<= rsmd.getColumnCount(); ++i)
            switch(rsmd.getColumnType(i)){
                case Types.VARCHAR:
                    linhaAtual.addElement(rs.getString(i));
                    break;
                case Types.INTEGER:
                    linhaAtual.addElement(new Long(rs.getLong(i)));
                    break;
                default:
                    JOptionPane.showMessageDialog(null,"O tipo do dados é: "+ rsmd.getColumnTypeName(i));
            }
            return linhaAtual;
        
    }
    
    
    
    
    public void mostraDadosArbitro( JTable tabela){
       //Primeiro Registro
        try{
             boolean registros = rsArbitro.next();

       //Se falso, não há registros
       if(!registros){
           JOptionPane.showMessageDialog(null,"Nenhum registro encontrado!");
           return;
       }
        }catch(SQLException en){
            en.printStackTrace();
       Vector colunas = new Vector();
       Vector linhas = new Vector();

       try{
           //Cabeçalhos da coluna
           ResultSetMetaData rsmd = rsArbitro.getMetaData();
           for(int i = 1; i<= rsmd.getColumnCount(); ++i){
               colunas.addElement(rsmd.getColumnName(i));
               do{
                   linhas.addElement(proximoRegistro(rsArbitro, rsmd));
               }while(rsArbitro.next());

               //Mostra os dados
               tabela = new JTable(linhas, colunas);



           }
       }catch(SQLException ex){
           JOptionPane.showMessageDialog(null,"Problema ao mostrar dados!");
           ex.printStackTrace();
       }
   }

Agora do frame

ClassConector cc = new ClassConector();
        cc.conectarComBD();
        String tipo = "RG";
        
        // tipo é  a coluna da tabela
        cc.ProcuraArbitro(tipo,rgJTextField.getText());

        cc.mostraDadosArbitro(arbitroJTB);

Alguma idéia?

3 Respostas

Marky.Vasconcelos

Debuga e ve se o seu vetor ‘linhas’ tem os elementos que voce quer.

E por favor

Não use DefaultTableModel!

Ivan_Alves

Não é por nada mas porque que você só adiciona os dados se ele cair no catch? você não deveria adiciona-los dentro do try{}?
Me refiro ao primeiro try

Fiuza

Ivan Alves:
Não é por nada mas porque que você só adiciona os dados se ele cair no catch? você não deveria adiciona-los dentro do try{}?
Me refiro ao primeiro try

Tem razão.Não tinha notado isso. Depois que você falou, dei uma olhada no código e reparei que uma } de um catch estava fechando lá embaixo…era por essa razão que não executava o código para inserção de dados.

Vlw Ivan!

@Marky

Tentei debugar, mas agora estou recebendo erro de resultSet is closed. Dei uma pesquisada e encontrei uma interface bastante interessante, chamada CachedRowSet.

Estou estudando ela no momento para ver se consigo implementá -la no meu código. Se alguém possuir algum material interessante sobre isso, será bem - vindo =D

Pode deixar Marky, minha próxima cruzada é a aprender a criar minhas próprias TableModels ;D

Abraços!

Criado 8 de junho de 2011
Ultima resposta 12 de jun. de 2011
Respostas 3
Participantes 3