BD e JTABLE

Companheiros,

Já li muitas e muitas matérias aqui no fórum relacionadas ao JTable mas ainda assim n consegui entender aquase nada que me permitisse criar minha própria aplicação, no NetBeans, utilizando essa componente, associado a uma conexão com um bd.

Na verdade meu desejo é pre-encher um JTable com o resultado de uma consulta ao BD.

Segue meu código:

        Vector cabecalho = new Vector();
        Vector linhas = new Vector();
        try{
            String dsn     = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/xxx/xxx.mdb";
            String usuario = "";
            String senha   = "";
            String sql     = "";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
            Connection con = DriverManager.getConnection(dsn,usuario,senha);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM Cadastro ORDER BY ESTACAO");
            rs.next();
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1; i <= rsmd.getColumnCount(); ++i)
                cabecalho.addElement(rsmd.getColumnName(i));
            do{
                linhas.addElement(rs.getString("ESTACAO"));
            }
            while (rs.next());
            validate();
            st.close();
        } catch (SQLException sqlex){
        }

Entendo que há muitas coisas erradas, por isso solicito alguma ajuda de vocês nessa questão.

Alguém pode me ajudar a desenvolver isso no NetBeans?

Cara, dá uma fuçada em DefaullTableModel, é facil e simples de usar.

Veja só:

DefaulTableModel modelo = new DefaultTableModel(new String{"campo1","campo2","campo3"};
//dá uma explorada nos metodos da instância modelo

jTable.setModel(modelo); // atribui para o jTable.

Para colocar valores segue:

DefaultTableModel modelo = (DefaulTableModel) jTable.getModel();

jTable.removeAll();

for (VO vo : listVo) {
     modelo.addRow(new String[]{vo.getCampo1(),vo.getCampo2(),vo.getCampo3()});
}

Se vc se aprofundar vai poder até fazer algo que faça a JTable receber valores diretamente do bean, eu fiz isso na minha aplicação e ficou jóia.
Bom ai está o q me pediu alguma dúvida é só falar.

Olá,
Veja se esse exemplo o ajuda…

[code]DefaultTableModel modelo = (DefaultTableModel)suaTabela.getModel();//obtem o tablemodel da tabela

    //Limpando os campos da tabela antes de inserir os dados da consulta   
    int i = 0;   
    while (modelo.getRowCount() > 0){   
        modelo.removeRow(i);   
    }    
    Connection con;   
    try {   
            con = ConnectionFactory.getConnection(); //ConnectionFactory é uma classe que fabrica conexções (tem que criá-la)   
            PreparedStatement ps = con.prepareStatement("SELECT * FROM suaTabela WHERE seuCampo = ? ");   
            ps.setString(1, (String) seuJComboBox.getSelectedItem());   
            ResultSet rs = ps.executeQuery();   
                           
            while (rs.next()){                   
                Object[] novaLinha = new Object[4];//cria um array de objetos com a quantidade igual as colunas da table (nesse caso 4)   
                novaLinha[0] = rs.getString("id");   
                novaLinha[1] = rs.getString("nome");      
                novaLinha[2] = rs.getString("login");      
                novaLinha[3] = rs.getString("senha");    
                modelo.addRow( novaLinha );//adiciona uma nova linha ao tablemodel da tabela    
            }   

    con.close();   
    }catch (SQLException e){        
            e.printStackTrace();   
    } [/code]

Pra esse exemplo tem que criar a classe ConnectionFactory:

[code]public class ConnectionFactory {

public static Connection getConnection() throws SQLException {     
    try {   
        Class.forName("com.mysql.jdbc.Driver");   
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/seuBanco","root", "admin");   
    } catch (ClassNotFoundException e) {    
        throw new SQLException(e.getMessage());   
    }   
}   

}[/code]
Como percebeu estou utilizando MySQL, caso seja outro gerenciador é só fazer as adaptações, Ok!?
Espero ter ajudado
T+

Muito Obrigado.

Vou testar esses dois exemplos e posto os resultados :slight_smile:

[quote=jimjr_ivan]Cara, dá uma fuçada em DefaullTableModel, é facil e simples de usar.

Veja só:

DefaulTableModel modelo = new DefaultTableModel(new String{"campo1","campo2","campo3"};
//dá uma explorada nos metodos da instância modelo

jTable.setModel(modelo); // atribui para o jTable.

Para colocar valores segue:

DefaultTableModel modelo = (DefaulTableModel) jTable.getModel();

jTable.removeAll();

for (VO vo : listVo) {
     modelo.addRow(new String[]{vo.getCampo1(),vo.getCampo2(),vo.getCampo3()});
}

[/quote]

O que seria essa VO vo: listVO ???

Pronto!

Sucesso!

Segue o código final:

try{
            String dsn     = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/xxx/xxx.mdb";
            String usuario = "";
            String senha   = "";
            String sql     = "";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
            Connection con = DriverManager.getConnection(dsn,usuario,senha);
            Statement st = con.createStatement();
            PreparedStatement ps = con.prepareStatement("SELECT * FROM OBJ WHERE ESTACAO=?");
            ps.setString(1, tf_busca.getText());
            ResultSet rs = ps.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel)tabela.getModel();
            int i = 0;
            while (modelo.getRowCount() > 0){
                modelo.removeRow(i);
            }
            while (rs.next()){
                String[] novaLinha = new String[4];
                novaLinha[0] = rs.getString("NOME");
                novaLinha[1] = rs.getString("IDADE");
                novaLinha[2] = rs.getString("CONF");
                novaLinha[3] = rs.getString("PPL");
                modelo.addRow( novaLinha );//adiciona uma nova linha ao tablemodel da tabela
            }
            st.close();
            con.close();
        }
        catch(Exception e){
            e.printStackTrace();
        }

:D:D

[quote=Wesley Marra]Olá,
Veja se esse exemplo o ajuda…

[code]DefaultTableModel modelo = (DefaultTableModel)suaTabela.getModel();//obtem o tablemodel da tabela

    //Limpando os campos da tabela antes de inserir os dados da consulta   
    int i = 0;   
    while (modelo.getRowCount() > 0){   
        modelo.removeRow(i);   
    }    
    Connection con;   
    try {   
            con = ConnectionFactory.getConnection(); //ConnectionFactory é uma classe que fabrica conexções (tem que criá-la)   
            PreparedStatement ps = con.prepareStatement("SELECT * FROM suaTabela WHERE seuCampo = ? ");   
            ps.setString(1, (String) seuJComboBox.getSelectedItem());   
            ResultSet rs = ps.executeQuery();   
                           
            while (rs.next()){                   
                Object[] novaLinha = new Object[4];//cria um array de objetos com a quantidade igual as colunas da table (nesse caso 4)   
                novaLinha[0] = rs.getString("id");   
                novaLinha[1] = rs.getString("nome");      
                novaLinha[2] = rs.getString("login");      
                novaLinha[3] = rs.getString("senha");    
                modelo.addRow( novaLinha );//adiciona uma nova linha ao tablemodel da tabela    
            }   

    con.close();   
    }catch (SQLException e){        
            e.printStackTrace();   
    } [/code]

Pra esse exemplo tem que criar a classe ConnectionFactory:

[code]public class ConnectionFactory {

public static Connection getConnection() throws SQLException {     
    try {   
        Class.forName("com.mysql.jdbc.Driver");   
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/seuBanco","root", "admin");   
    } catch (ClassNotFoundException e) {    
        throw new SQLException(e.getMessage());   
    }   
}   

}[/code]
Como percebeu estou utilizando MySQL, caso seja outro gerenciador é só fazer as adaptações, Ok!?
Espero ter ajudado
T+[/quote]

Perfeito Parabens…