[Resolvido] JTable & MySQL (das 07:10 às 16:47). Tá na hora de pedir ajuda!
6 respostas
ronaldoo
Olá pessoal,
Estou tentando como digo no título do post a muitas horas. Já tentei com o tutorial aqui do GUJ e com tantos outros da internet, mas não estou conseguindo.
Minha intenção é pegar os dados do meu banco de dados MySQL e mostrá-los no meu JTable. Não dá erro na hora de compilar, mas quando eu executo o método a tabela fica toda cinza (tipo desativada) e não mostra nada... Apenas redimenciona as colunas.
Agradeço qualquer ajuda, meu código é o seguinte:
public void preencher_jtable() {
TabelaClientes.getColumnModel().getColumn(0).setPreferredWidth(20);
TabelaClientes.getColumnModel().getColumn(1).setPreferredWidth(150);
TabelaClientes.getColumnModel().getColumn(2).setPreferredWidth(20);
DefaultTableModel modelo = (DefaultTableModel) TabelaClientes.getModel();
modelo.setNumRows(0);
try {
bancoLocadora.conecta();
rs = bancoLocadora.stmt.executeQuery("SELECT * FROM CLIENTES");
while (bancoLocadora.rs.next()) {
modelo.addRow(new Object[]{bancoLocadora.rs.getString("CODIGO_CLIENTE"), bancoLocadora.rs.getString("NOME_CLIENTE"), bancoLocadora.rs.getString("CPF_CLIENTE"), bancoLocadora.rs.getString("RG_CLIENTE")});
}
bancoLocadora.rs.first();
} catch (SQLException erro) {
JOptionPane.showMessageDialog(null, "Erro ao listar no JTable " + erro);
}
}
[color=red]----------------------------------------------------------------------------------
Resolvido. Código da solução está logo abaixo. Obrigado a todos!
ViniGodoy: Só consegui com o Default cara... Quais problemas podem ocorrer - ou limitações - se eu continuar usando ele? Se quiser continuar me ajudando, eu quero muito aprender a fazer do jeito certo!
Estaeaminhaestafuncionando,talvezoseuproblemaenabuscadobanco.publicvoidconsultaNotafiscal(){jTable2.getColumnModel().getColumn(0).setPreferredWidth(20);jTable2.getColumnModel().getColumn(1).setPreferredWidth(10);jTable2.getColumnModel().getColumn(2).setPreferredWidth(10);jTable2.getColumnModel().getColumn(3).setPreferredWidth(40);jTable2.getColumnModel().getColumn(4).setPreferredWidth(10);jTable2.getColumnModel().getColumn(5).setPreferredWidth(10);DefaultTableModelmodelo=(DefaultTableModel)jTable2.getModel();modelo.setNumRows(0);try{Stringlista=“SELECT*FROMnotafiscal”;// WHERE numero_nt =’"+tfPesquisa.getText()+"’";pstm=banco.conectar().prepareStatement(lista);rs=pstm.executeQuery();while(rs.next())modelo.addRow(newObject[]{rs.getString(“numero_nt”),rs.getString(“codigo_for”),rs.getString(“codigo_prod”),rs.getString(“preco_prod”),rs.getString(“qtd_prod”),rs.getString(“total_nt”)});}catch(SQLExceptionerro){}finally{banco.desconectar();}}
ViniGodoy
ronaldoo, pode colocar o código todo do seu JFrame?
Só uma dica, já de antemão. Não use o DefaultTableModel. A JTable não foi feita para ser usada desse jeito.
Essa classe serviu somente de exemplo, na prática, monte seu próprio model.
<blockquote><divclass="quote-author">erisvaldo_anjos:</div>Esta e a minha esta funcionando, talvez o seu problema e na busca do banco.public void consultaNotafiscal(){jTable2.getColumnModel( ).getColumn(0).setPreferredWidth(20);jTable2.getColumnModel( ).getColumn(1).setPreferredWidth(10);jTable2.getColumnModel( ).getColumn(2).setPreferredWidth(10);jTable2.getColumnModel( ).getColumn(3).setPreferredWidth(40);jTable2.getColumnModel( ).getColumn(4).setPreferredWidth(10);jTable2.getColumnModel( ).getColumn(5).setPreferredWidth(10);DefaultTableModel modelo = (DefaultTableModel)jTable2.getModel();modelo.setNumRows(0);try{String lista =“SELECT * FROM notafiscal”; // WHERE numero_nt =’"+tfPesquisa.getText()+"’";pstm=banco.conectar().prepareStatement(lista);rs=pstm.executeQuery();while(rs.next())modelo.addRow(newObject[]{rs.getString(“numero_nt”),rs.getString(“codigo_for”),rs.getString(“codigo_prod”),rs.getString(“preco_prod”),rs.getString(“qtd_prod”),rs.getString(“total_nt”)});}catch(SQLExceptionerro){}finally{banco.desconectar();}}</blockquote>
erisvaldo_anjos: Tentei implementar isso que você falou mas dá uma carrada de erros. Seguem eles:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
at jifClientes.consultaNotafiscal(jifClientes.java:722)
at jifClientes.bCancelarClientesActionPerformed(jifClientes.java:577)
at jifClientes.access$500(jifClientes.java:18)
at jifClientes$6.actionPerformed(jifClientes.java:179)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
ViniGodoy: Vou verificar estes links agora depois do banho, mas já estou indo meio desanimado cara… Não consigo compreender o X da questão!
Em breve posto a boa ou má novidade, obrigado a vocês dois!
ronaldoo
ViniGodoy: Li os tutoriais. Consegui fazer mostrar os dados finalmente (ainda insistindo no DefaultTableModel…)!!! Mas aconteceu algo muito estranho, mostrou uma vez, e agora todo meu formulário não está editável, vê se pode uma coisa dessas… Amanhã vou dar uma analisada para ver onde está dando bug no código.
Obrigado mais uma vez pela ajuda - espero conseguir compreender direito aquele tutorial amanhã… Agora vou dormir porque estou acabado. Boa noite!
ronaldoo
ViniGodoy:
ronaldoo, pode colocar o código todo do seu JFrame?
Só uma dica, já de antemão. Não use o DefaultTableModel. A JTable não foi feita para ser usada desse jeito.
Essa classe serviu somente de exemplo, na prática, monte seu próprio model.
Certo [color=blue]ViniGodoy[/color], li mais de uma vez esses artigos. Mas não consegui pegar o fio da meada.
Não há um meio mais fácil de pegar (enquanto aguardo a resposta estou continuando a testar) os dados do MySQL e jogá-los numa variável ou vetor e depois exibí-los na JTable, ou até mesmo exibí-los direto sem armazenagem em tempo de execução?
Cara, tô me sentindo um imbecil com essas dúvidas mas quero muito aprender isso - e da maneira certa; como você mencionou não é bom usar o default, e eu estava tentando aprender usar justo ele… De qualquer forma ainda não deu certo. Você poderia me dar mais alguma dica ou link ?
Muito obrigado mais uma vez, um abraço.
ronaldoo
Pronto galera, consegui exibir os dados que tanto queria! Muito obrigado a todos vocês!
ViniGodoy: Só consegui com o Default cara... :( Quais problemas podem ocorrer - ou limitações - se eu continuar usando ele? Se quiser continuar me ajudando, eu quero muito aprender a fazer do jeito certo!
Segue abaixo o código finalizado para tal: