Conexão JTable e Banco Access

7 respostas
F

Tenho uma JTable dentro de uma JDialog. Queria que quando a JDialog fosse invocada, aparecesse todos registros (ID e Nome) da tabela Clientes (Access) dentro da JTable. Eu compilo pelo JCreator e não dá erro nenhum. Quando A JDialog abre só aparece o tratamento de erro da conexão e não aparece os dados na JTable. Uso a mesma conexão para inserir dados na tabela clientes e funciona perfeitamente.
Segue o código:

final DefaultTableModel modelo = new DefaultTableModel();    
    JTableDados = new JTable(modelo);        
    modelo.addColumn("ID");
    modelo.addColumn("Nome");
    modelo.addColumn("CPF");
    modelo.addColumn("Telefone");
    modelo.addColumn("Data Nasc.");
    modelo.addColumn("Data Cadastro");
    JTableDados.getColumnModel().getColumn(0).setPreferredWidth(10);
    JTableDados.getColumnModel().getColumn(1).setPreferredWidth(250);
    JTableDados.getColumnModel().getColumn(2).setPreferredWidth(50);
    JTableDados.getColumnModel().getColumn(3).setPreferredWidth(50);
    JTableDados.getColumnModel().getColumn(4).setPreferredWidth(50);
    JTableDados.getColumnModel().getColumn(5).setPreferredWidth(50);
    modelo.addRow(new Object[]{null, null, null, null, null, null});  
    JTableDados.setFont(new Font("Segoe UI",Font.PLAIN,11));
    JTableDados.setSelectionBackground(Color.YELLOW);
    JTableDados.setSelectionForeground(Color.BLUE);                
    JTableDados.getTableHeader().setResizingAllowed(false);// evita que as colunas sejam redimensionadas        
    JTableDados.getTableHeader().setReorderingAllowed(false);// evita que as colunas sejam reordenadas 
    JTableDados.setShowGrid(false);// oculta a grade da tabela              
    JTableDados.setShowHorizontalLines(false);// oculta as linhas horizontais da tabela               
    JTableDados.setShowVerticalLines(false);// oculta as linhas verticais da tabela        
    JScrollPane1.setViewportView(JTableDados); 
    JPanel2 = new JPanel();	
    JPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 0, 11)), "Clientes Cadastrados", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 0, 11)));
    JPanel2.setFont(new java.awt.Font("Segoe UI", 0, 11));        
    JPanel2.setBounds(140, 320, 840, 340);
    tela2.add(JPanel2);
    try
{
String url = "jdbc:odbc:SVL";
String usuario = "";
String senha = "";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con;
con = DriverManager.getConnection(url,usuario,senha);
Statement st = con.createStatement();
    ResultSet RS = st.executeQuery("SELECT * FROM Clientes");
    while(RS.next()){
    int ID = RS.getInt(0); 
    String Nome = RS.getString(1); 
    modelo.addRow(new Object[]{new Integer(ID), new String(Nome)});
    }
    con.close(); 
    RS.close(); 
    }
    catch(Exception event) {
    JOptionPane.showMessageDialog(null,"Não foi possível estabelecer conexão com o banco de dados!","Sistema Vídeo Locadora Versão 1.0.0 - By Fernando Matheus",JOptionPane.ERROR_MESSAGE);
    }

7 Respostas

R

Cara, olhei e não consegui ver nada, tenta tirar o try catch só pra vc ver q erro vai gerar e posta aqui pra gente olhar!

N

Acredito que terá mais sucesso em obter a resposta em:

http://www.portaljava.com/forum/forums/show/6.page

Sem querer ser chato, mas sendo:
LEIA ISTO ANTES DE TUDO:
http://www.portaljava.com/forum/posts/list/37303.page

F

Ainda não consegui resolver meu problema. A compilação roda normalmente, mas quan abre a janela ocorre o seguinte erro:

Erro Cmdo SQL [Microsoft][ODBC Drive Manager] índice de descritor inválido

Por favor me ajudem.

R

Você configurou uma conexão ODBC dentro do windows?

F

Sim!
Inclusive eu uso um SELECT para retornar informações dentro da JTextfield e funciona certinho.

R

Cara tenta tira esse final
final DefaultTableModel modelo = new DefaultTableModel();

F

Consegui resolver!
O problema estava aqui:

int ID = RS.getInt(0);

String Nome = RS.getString(1);

modelo.addRow(new Object[]{new Integer(ID), new String(Nome)});
mudei para:

int ID = RS.getInt(id);

String Nome = RS.getString(nome);

modelo.addRow(new Object[]{new Integer(ID), new String(Nome)});

Agora deu certo!

O engraçado que eu já havia feito esta modificação e continuava o problema.

Tenho mas um pequeno problema:

Ainda tenho estas 4 colunas para preencher. Não sei como fazer. Podem me ajudar?

modelo.addColumn("CPF");   
    modelo.addColumn("Telefone");   
    modelo.addColumn("DataNasc.");   
    modelo.addColumn("DataCadastro");
int ID = RS.getInt(id);

String Nome = RS.getString(nome);

??? =   ??? (CPF);

??? =   ??? (Telefone);

??? =   ??? (DataNasc);

??? =   ??? (DataCad);

modelo.addRow(new Object[]{new Integer(ID), new String(Nome)}); ???

Estes são os campos no banco Access

CPF (formato texto)
Telefone (formato texto)
DataNasc (formato data)
DataCad (formato data)

Criado 4 de abril de 2008
Ultima resposta 12 de abr. de 2008
Respostas 7
Participantes 3