1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

[EDITADO] Select deixa de funcionar quando mesclado com JTextField

Gente, bom dia!

Eu não encontrei solução pro meu problema, então estou abrindo um tópico. Caso haja solução postada e eu não tenha encontrado, me desculpem.

Seguinte: estou fazendo uma aplicação local, onde utilizo um banco de dados, e estou com problema na cláusula select.

Quando eu coloco o select puro (Exemplo real: SELECT * FROM estoque WHERE desc_peca LIKE '%a%' ) a tabela me retorna os dados normalmente.

O problema é que eu quero que o dado a ser pesquisado venha de um Text Field. Então eu escrevi o select da seguinte forma : SELECT * FROM estoque WHERE desc_peca LIKE '%" + textfield.getText() + "%' , mas aí ele me retorna a tabela vazia, como se não houvessem dados ali.

Pensei que o problema está no select, ou que o Text Field não está retornando valor para o sistema, mas ao colocar um System.out.print pra ver o se o text field estava pegando o valor, vi que de fato estava.

Então me resta crer que o meu select foi escrito de forma errada. Qual seria então a forma mais correta de resolver isso? Onde estou errando? Alguém teria uma solução pra mim?

EDIT

Eu achei que o problema está no código que está no botão, porque nada dentro desse if funciona... mas se eu tirar o if e deixar apenas o trecho correspondente ao else, também não funciona... Resumindo: não sei mesmo onde está o problema

segue o código:

 private void pesq_prodActionPerformed(java.awt.event.ActionEvent evt) {                                          
     if (descprod.getText()== null && valorprod.getText()== null&& 
             marcaprod.getText()== null && qtdprod.getText()== null){
            JOptionPane.showMessageDialog(null, "Campos estão vazios");
            jDBTable1.setJDBQuery(Atualizar);
             Atualizar.execQuery(); //SELECT * FROM estoque 

     }else{
          jDBTable1.setJDBQuery(BuscaDesc);
          BuscaDesc.execQuery(); //SELECT * FROM estoque WHERE desc_peca LIKE '%" + textfield.getText() + "%'
     }

EDIT 2

O josiloch me passou um link bacana sobre PreparedStatement, mas quando crio o select, o programa dá erro. Segue o trecho do código

public void consulta_descricao(){


        String sql = "SELECT * FROM estoque WHERE desc_peca = ? "; // ERRO AQUI
        try {

           PreparedStatement stmt = connection.prepareStatement(sql);
           stmt.setString(1,PesquisarProduto.descprod.getText().toString());

           ResultSet rs =  stmt.executeQuery(sql);
           while (rs.next()) {

                int iden = rs.getInt("id_est");
                String desc = rs.getString("desc_peca");
                String marca=rs.getString("marca_peca");
                String qtd=rs.getString("qtd_peca");
                String val = rs.getString("valor_peca");

               System.out.println("id:" + iden);
               System.out.println("desc:" + desc);
               System.out.println("qtd:" + qtd);
               System.out.println("val:" + val);

            }

           stmt.close();

        } catch (SQLException ex) {
           System.out.println("Erro: " + ex.toString());
     }

Erro: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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

  • Não é uma coisa muito legal trabalhar com dados inseridos diretos pelo usuario em uma clausula sql, principalmente por problemas de sql injection, não sei exatamente pq nao ta funcionando ai, mas uma coisa legal a se fazer seria trabalhar com PreparedStatement.

    josiloch   26 de jun de 2015
  • Tá josiloch.... porque não é uma coisa muito legal? É a primeira vez que eu faço esse tipo de aplicação, então estou meio perdida. Como esse programa vai ficar local, não achei que teria problemas com sql injection...rs vou dar uma pesquisada em PreparedStatement tbm.... rs obrigada

    EDIT: acabei de ver que o que estou trabalhando com PreparedStatement sem saber... hahaha

    Cin Soares   26 de jun de 2015
  • è que assim, o usuario pode colocar qualquer coisa em um campo de texto, por isso não é bom jogar direto na consulta sql...

    josiloch   26 de jun de 2015
  • Putz cara... só sei fazer dessa forma... como poderia fazer então?

    Cin Soares   26 de jun de 2015
Mostrar todos os 6 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags mysql java swing ou faça a sua própria pergunta.