[RESOLVIDO]Resultado de uma busca - JTable

26 respostas
filipi

Boa tarde pessoal!!!

Bom estou com o seguinte problema,tenho o resultado de uma busca no banco de dados,eu consigo preencher todos os campos de meu cadastro com ela,porém eu gostaria de dar a opção ao usuario de escolher qual resultado da busca ele quer quando a mesma retornar mais de um resultado. Primeiramente pensei em preencher um JTable com os resultados,porém não estou conseguindo,a maldita tabela nunca se preenche kkkkkk,já segui varios material de como fazer,mais não dá resultado,talvez exista uma outro componente que possa ser mais facil de manipular para atender essa necessidade,também pensei em preencher um combobox já vi uma aplicacão assim,gostaria de saber o que é melhor para utilizar,e que me passassem algum material ou video aula,ou até mesmo uma ideia de como fazer!

Obrigado

26 Respostas

yfalbino

voce pode postar o codigo no qual voce está tentando preencher no JTable ?

filipi
Primeiramente na classe DAO tenho um método para fazer a busca do tipo lista:
public List<Estoque> buscaEstoque(String estoque)throws SQLException{
                List<Estoque> busca = new ArrayList<>();
                
                String select = "select * from estoque ";
                PreparedStatement state = getConnection().prepareStatement(select);
                state.setString(1,estoque);
                ResultSet set = state.executeQuery();
                
                 while(set.next()){
                            Estoque est = new Estoque();
                            est.setId(set.getInt("id"));
                            est.setProduto(set.getString("produto"));
                            est.setCor(set.getString("cor"));
                            est.setNumero(set.getInt("tamanho"));
                            est.setRef(set.getInt("referencia"));
                            busca.add(est);
            }
                 set.close();
                 state.close();
                 
                 return busca;
            }
Depois na classe que é criado o view tenho a criação da tabela
DefaultTableModel tabela = new DefaultTableModel(null,new String[]{"Produto","Cor","Tamanho","Referencia"});
    List<Estoque> estoque;
    ListSelectionModel listEstoque;
Um método para listar o que receber o textfield
public void listarProdutos() throws SQLException{
        EstoqueDao dao = new EstoqueDao();
        estoque = dao.buscaEstoque("%" + TxtBusca.getText()+ "%");
Inserir as linhas
*private void mostrarLista(List<Estoque> estoque) {
        if(estoque.size() == 0){
            JOptionPane.showMessageDialog(this, "Nenhum produto encontrado");
        }else{
            String[] linha = new String[]{null,null,null,null};
            for(int i =0; i< estoque.size(); i++){
                tabela.addRow(linha);
                tabela.setValueAt(estoque.get(i).getProduto(), i,0);
                tabela.setValueAt(estoque.get(i).getCor(), i,1);
                tabela.setValueAt(estoque.get(i).getNumero(), i,2);
                tabela.setValueAt(estoque.get(i).getRef(), i,3);
yfalbino

aparentemente nao vejo nenhum erro na inserção na JTable, ele nao retorna erro nenhum quando voce faz a busca ?

da uma olhada no metodo que eu uso para fazer buscar e listar numa JTable:

DefaultTableModel modelo = (DefaultTableModel) Tabela.getModel(); int ContadorProdutos = 0; Connection con; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/SeuBanco", "root", "SuaSenha"); Statement stm = con.createStatement(); ResultSet rs = stm.executeQuery("select * from produtos"); while (rs.next()) { modelo.addRow(new Object[]{"", "", "", ""}); TabelaProdutosAtivos.setValueAt(rs.getString("Campo1"), ContadorProdutos, 0); TabelaProdutosAtivos.setValueAt(rs.getString("Campo2"), ContadorProdutos, 1); TabelaProdutosAtivos.setValueAt(rs.getString("Campo3"), ContadorProdutos, 2); TabelaProdutosAtivos.setValueAt(rs.getString("Campo4"), ContadorProdutos, 3); ContadorProdutos++; } con.close(); } catch (ClassNotFoundException | SQLException ex) { System.out.println(ex); }

aqui comigo este método funciona perfeitamente, se voce quizer, teste ai no seu e veja se funciona

espero ter ajudado.

filipi

Pois é aparenta estar correto porém o que acontece é o seguinte,quando eu testo minha aplicação e busco um produto cadastrado no banco de dados a busca cai na exceção,mostra a mensagem de erro,e após isso mostra o resultado da busca! Muito estranho! O botão busca está assim

private void BtnBuscaActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            listarProdutos();
        } catch (SQLException ex) {
             JOptionPane.showMessageDialog(this,"Ocorreu um erro!\n Tente novamente!");
        }
        EstoqueController est = new EstoqueController();
        try{
            
            Estoque estoque = est.buscaProduto(TxtBusca.getText());
            TxtProduto.setText(estoque.getProduto());
            TxtCor.setText(estoque.getCor());
            TxtTamanho.setText(String.valueOf(estoque.getNumero()));
            TxtReferencia.setText(String.valueOf(estoque.getRef()));
            limpaBusca();
       
        }catch(SQLException e){
            JOptionPane.showMessageDialog(this,"Ocorreu um erro!\n Tente novamente\n"+e.getLocalizedMessage());
        }catch(NullPointerException n){
            JOptionPane.showMessageDialog(this,"Parametros incorretos!\n"+ n.getLocalizedMessage());
            
        }
    }

Ali no começo eu chamo o método que vai preencher a tabela só que o codigo já pula e cai direto no catch e mostra a mensagem que eu coloquei. Não entendo porque não entra no método.

yfalbino

troque esta linha:

JOptionPane.showMessageDialog(this,"Ocorreu um erro!\n Tente novamente!");

por esta:

JOptionPane.showMessageDialog(this,"Erro: " + ex);

e poste novamente o erro que o catch gerou, assim da para analizar melhor o que está acontecendo

filipi

Mostra na tela o erro assim:

Erro! java.sql.SQLException: Parameter index out of range(1>0).

heberth.ph

No método que recebe o jtextfield, acrescente no final:

public void listarProdutos() throws SQLException{ EstoqueDao dao = new EstoqueDao(); estoque = dao.buscaEstoque("%" + TxtBusca.getText()+ "%"); mostrarLista(estoque); }

filipi

Caro amigo,já acrescentei,não mudou em nada,continua caindo nessa exceção mencionada no post acima!

filipi

Alguma sugestão,ou algum material?!

yfalbino

sinceramente nao sei o que é este erro, nunca tinha dado este erro comigo antes

voce tentou usar o codigo que eu te mandei ?

filipi

Eu tentei colocar seu método mais não consegui,onde ele se encaixaria nos códigos que te mandei?

se eu substituo a linha

String select = "select * from estoque ";

por

String select = "select * from estoque where produto like ? ";

Ele não cai na excessao,porem não lista a tabela,apenas conclui a busca.

yfalbino

voce teria que mexer em algumas coisas do seu programa para implementar o metodo que eu te passei, o ideal seria voce colocar numa função e chamar ele em um botao, ou algo assim

mas esse outro modo nao aparece nada na tabela ?
ou ela lista so 1 produto ?

L

Cara, segue este post como exemplo:

filipi

yfalbino Não lista nada,não aparece nenhum produto na tabela,porém o metodo da busca retorna o produto,apenas nao joga para tabela.

Lucas_duzo vou analizar esse link

Muito obrigado aos dois :slight_smile:

filipi

yfalbino Cara deu certo implementando teu método,fiquei muito contente em resolver isso…Muito obrigado! Não implementei antes por não havia entendido como usar!

Até uma proxima,valeu!

filipi

Sabe como que coloca o [resolvido] no tópico?

yfalbino

magina ^^

sempre que precisar poste, sempre tentaremos resolver sua duvida, e fico feliz em ter ajudado.

vá no seu primeiro post desse topico, clique em editar, e no assunto, coloque [resolvido] antes ou depois do titulo

filipi

Certinho problema resolvido.

Mais uma vez obrigado!

filipi

Cara surgiu mais uma dúvida,resolvi escrever aqui por que você já sabe do caso. Esse método que você me orientou para usar,me traz tudo que tenho dentro da tabela do banco para a tabela do java,visto que é usado select * from nome do banco. Gostaria de aplicá-lo dentro de uma busca para ele me retornar o resultado encontrado,neste caso adaptei o select para minha busca,em primeiro caso tentei assim

select * from estoque where produto = ?

O que era para me voltar o resultado esperado da busca porém ele me gera esse erro :

java.sql.SQLException: Syntax error or access violation, message from server: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1"

Então posteriormente tentei dessa forma:

String sql = "select * from estoque where produto ="+TxtBusca.getText();

O erro permanece o mesmo porém ao invez de ‘?’ ele coloca ’ ’ no erro.
Um erro que indica erro na sitax do comando sql,porém como pode ver o mesmo está correto,a tabela e a coluna existem e os nomes estão corretos.Não seria erro de sitax,o mesmo comando estava na busca sem a tabela e funcionava.E o mais interessante é que se eu especifico a busca,por exemplo

select * from esoque where produto = 'teste' apenas para testar ele me retorna o resultado corretamente

Acredito que possa me ajudar com isso,tentei pesquisar na internet mais não encontrei algo que me ajudasse.
Grato.

yfalbino

Ja aconteceu este erro comigo, e geralmente ele quer dizer que falta as aspas simples no comando

Tente assim:

String sql = "select * from estoque where produto ='"+TxtBusca.getText()+"'";

Acredito que isso resolva, desculpe se tiver algum erro na sintaxe, estou no tablet, meu pc ta na assistencia hehe

filipi
Maravilha amigo,sumiu o erro,porém não me retornou nada na tabela... Inclusive preencheu os textfields,isso ocorre quando encontra os dados da busca.O que pode ter acontecido? Pelo que entendo esse laço era para mostrar o que ele encontra,certo?
while(rs.next()){
                tabela.addRow(new Object []{"","","",""});
                jTable.setValueAt(rs.getString("produto"),contadorProduto,0);
                jTable.setValueAt(rs.getString("cor"),contadorProduto,1);
                jTable.setValueAt(rs.getString("tamanho"),contadorProduto,2);
                jTable.setValueAt(rs.getString("referencia"),contadorProduto,3);
                contadorProduto++;
               
            }
yfalbino

sinceramente nao seio que pode estar acontecendo

voce tem certeza que ele retornou algo na busca ?

sim, o laço era para retornar o que ele encontra no banco

filipi

Coloquei assim para testar

JOptionPane.showMessageDialog(this,"Encontrado"+TxtBusca.getText());

Ele retornou na janela somente a palavra Encontrado

yfalbino

Isso quer dizer que seu campo de texto esta vazio, verifique se voce esta fazendo a busca no campo de text certo kkkkk

filipi

Sim amigo,já havia percebido que estava vindo vazio o campo.Porém eu chamo esse mesmo campo em um outro botão e funciona.Isso que me deixa frustrado.

yfalbino

muito estranho isto, se em um botao esta funcionando, entao no codigo do mysql era para funcionar tambem.

Criado 4 de maio de 2013
Ultima resposta 16 de mai. de 2013
Respostas 26
Participantes 4