Como ler um bd e jogar num jTable - Alguem ja deve ter passado por isso

5 respostas
marciofermino

Muitas pessoas entraram em contato mais coisas muito complicadas…
Alguem ja deve ter feito isso de forma mais simples…

ja postei varias mensagens… e ndaa
se alguem puder ajudar;; agradeco

5 Respostas

danieldestro

Se você já postou várias mensagens do mesmo assunto e ninguem respondeu, não vai ser agora que vão responder… heehhehehehe…

Cara, você sabe buscar dados de um BD (com JDBC) ??? Sabe manipular um JTable ??? Estude essas APIs e quebre um pouco a cabeça em como integrar tudo isso. Aqui no GUJ tem tutorial de JDBC e JTable.

Boa sorte.

V
Faça uma conexao com o banco de dados para que este te retorne um ResultSet. Neste esquema:
DriverManager.registerDriver(new OracleDriver());
  Connection conec = DriverManager.getConnection("jdbc:oracle:thin:@ipdoBanco:Porta:Servico",USUARIO, SENHA);
   Statement stmt = conec.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(Query);

Este he um esquema de conexao para o Banco ORACLE. Procure ai a conexao pra o banco q vc estiver usando!

Percorra este resultset e monte um TableModel!

Apos isso, incremente esse TableModel em sua Jtable.

/**
   * Gera um modelo a partir de um ResultSet.
   * @param rs
   * @return Retorna um modelo de tabela contendo os dados de um ResulSet.
   * @throws java.lang.Exception
   *@Autor: Vitor Eduardo Patriarcha - Monolito Sistemas
   */
  public DefaultTableModel GeraModelo (ResultSet rs)  throws Exception
  {
      DefaultTableModel modelo = null;
   try{
    ResultSetMetaData rsmd;
    rsmd = rs.getMetaData();
         
    int num_col = 0;
    int cont = 0;
    num_col = rsmd.getColumnCount();
    int num_lin;
   
    rs.last();
    num_lin = rs.getRow();
    rs.beforeFirst();
   
    String dados[][] = new String [num_lin][num_col];
    String colunas[] = new String [num_col];
 
    for (int i = 1;i <= num_col; i++)
    {
      colunas[i - 1] = rsmd.getColumnLabel(i);
    }
   
    int a;   
    while (rs.next())
    {
      for (int x = 0; x < num_col; x++)
      {       
        a = rsmd.getColumnType(x + 1);
        if (a == 2)
        {
          dados[cont][x] = String.valueOf(rs.getString(x + 1));
        }else if (a == 91)
        {
          dados[cont][x] = String.valueOf(rs.getDate(x + 1));
        }else
        {
          dados[cont][x] = rs.getString(x + 1);
        }         
      } 
      cont ++;     
    }
    modelo = new DefaultTableModel(dados, colunas);
   
  } catch(Exception e) {
      JOptionPane.showMessageDialog( null,"Erro na Função GeraModelo - " + e.getMessage(), "Erro", JOptionPane.INFORMATION_MESSAGE ); 
  }   
   
    return modelo;
  }

Este codigo prontinho te retorno o modelo printinho!
PAsse eu resultset pra ele que ele faze tudo
Ex.
Jtable1.setModel(GeraModelo(MeuResultSET));

Mais que isso he impossivel!

edertp

marciofermino, só para te dar mais opcoes no Deitel há abordagem de JDBC, entao é mostrado uma classe q tb retorna um tableModel pra tu setares no JTable. A classe é ResultSetTableModel e tem diversos métodos interessantes.
Falos.

marciofermino

desculpe mis oque é deitel?

marciofermino

import javax.swing.*;

import java.awt.*;

import javax.swing.JPanel;

import javax.swing.border.EtchedBorder;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.JTableHeader;

import sun.security.jca.GetInstance.Instance;

import java.awt.GridBagLayout;

import java.sql.*;

import java.util.Vector;

import javax.swing.JButton;

import java.awt.Rectangle;

import javax.swing.JTextField;

import javax.swing.JTable;

@SuppressWarnings(“serial”)
public class Tela1 extends JFrame{

private JPanel jPanel = null;
private static JTable jTable = null;
public Tela1()	{
	super ( "Tela " );
	initialize();
	setVisible ( true );
	setLocation(350,200);

}

private void initialize() {
    this.setSize(new Dimension(495, 321));
    this.setContentPane(getJPanel());
	
}


private JPanel getJPanel() {
	if (jPanel == null) {
		jPanel = new JPanel();
		jPanel.setLayout(null);
		jPanel.add(getJTable(), null);
	}
	return jPanel;
}

public static void Conexao()
{
	  String data = "jdbc:odbc:dbdemos"; 
        try {
     	     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
             Connection conn = DriverManager.getConnection(
                 data, "", "");
             Statement st = conn.createStatement();
             ResultSet rec = st.executeQuery(
                 "SELECT * FROM Items ");
                 
             System.out.println("FIPS\tCOUNTRY\t\tYEAR\t" +
                 "ANTHRACITE PRODUCTION");
             while(rec.next()) {
                 System.out.println(rec.getString(1) +  "\t"
                         + rec.getString(2) + "\t\t"
                         + rec.getString(3) + "\t"
                         + rec.getString(4));
             }
             st.close();
         } catch (SQLException s) {
             System.out.println("SQL Error: " + s.toString() + " "
                 + s.getErrorCode() + " " + s.getSQLState());
         } catch (Exception e) {
             System.out.println("Error: " + e.toString()
                 + e.getMessage());
         }

}




/**
 * This method initializes jTable	
 * 	
 * @return javax.swing.JTable	
 */
private JTable getJTable() {
	if (jTable == null) {
		jTable = new JTable();
		jTable.setBounds(new Rectangle(85, 55, 375, 80));
		
	}
	return jTable;
}

public static void main(String[] args)	{
	Tela1 tela1 = new Tela1();
	tela1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	Conexao();
//		???

jTable.setModel(GeraModelo(rec));

//      ???	

}
/**
    * Gera um modelo a partir de um ResultSet.
    * @param rs
    * @return Retorna um modelo de tabela contendo os dados de um ResulSet.
    * @throws java.lang.Exception
    *@Autor: Vitor Eduardo Patriarcha - Monolito Sistemas
    */
   public DefaultTableModel GeraModelo (ResultSet rs)  throws Exception
   {
       DefaultTableModel modelo = null;
    try{
     ResultSetMetaData rsmd;
     rsmd = rs.getMetaData();
          
     int num_col = 0;
     int cont = 0;
     num_col = rsmd.getColumnCount();
     int num_lin;
    
     rs.last();
     num_lin = rs.getRow();
     rs.beforeFirst();
    
     String dados[][] = new String [num_lin][num_col];
     String colunas[] = new String [num_col];
  
     for (int i = 1;i <= num_col; i++)
     {
       colunas[i - 1] = rsmd.getColumnLabel(i);
     }
    
     int a;   
     while (rs.next())
     {
       for (int x = 0; x < num_col; x++)
       {       
         a = rsmd.getColumnType(x + 1);
         if (a == 2)
         {
           dados[cont][x] = String.valueOf(rs.getString(x + 1));
         }else if (a == 91)
         {
           dados[cont][x] = String.valueOf(rs.getDate(x + 1));
         }else
         {
           dados[cont][x] = rs.getString(x + 1);
         }         
       } 
       cont ++;     
     }
     modelo = new DefaultTableModel(dados, colunas);
    
   } catch(Exception e) {
       JOptionPane.showMessageDialog( null,"Erro na Função GeraModelo - " + e.getMessage(), "Erro", JOptionPane.INFORMATION_MESSAGE ); 
   }   
    
     return modelo;
   }

}

Criado 5 de outubro de 2006
Ultima resposta 5 de out. de 2006
Respostas 5
Participantes 4