Dúvida com pesquisa em BD - sql

3 respostas
E

Galera, boa noite.
Este é meu primeiro post no fórum, então vamos lá.

To desenvolvendo um simples aplicativo pra estoque de uma loja de confecções, e me deparei com um probleminha.

Num jDialog, tenho 2 opções de pesquisa, por REFERÊNCIA e por PRODUTO.
pois ai vai meu código:

try {
            Class.forName("com.mysql.jdbc.Driver");

            Connection con;

            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/lojacentury", "root", "eduardo");
            
            String pd = "%" + txtProd.getText() + "%";
            String rf = txtRef.getText();

            String query = "select * from produtos where ref = ? OR produto like ?";

            PreparedStatement stmt = con.prepareStatement(query);



            stmt.setString(1, rf);
            stmt.setString(2, pd);

            ResultSet rs;

            rs = stmt.executeQuery();

            DefaultTableModel tb = (DefaultTableModel) tbLista.getModel();

            tb.setNumRows(0);

            while (rs.next()) {
                tb.addRow(new Object[]{rs.getString("ref"),
                            rs.getString("produto"),
                            rs.getString("descricao"),
                            rs.getString("pc_compra"),
                            rs.getString("pc_venda")
                        });
            }


        } catch (ClassNotFoundException ex) {
            System.out.println("Classe não Encontrada.");
        } catch (SQLException e) {
            System.out.println("Erro de SQL.");
        }



    }

O problema é que, ao pesquisar pela referência, ele me retorna todas os registros.
Acredito que isso esteja acontecendo porque o meu while ta considerando o conteúdo vazio do campo produto.

Alguém poderia me dar alguma solução?

3 Respostas

Cl_cio_Guiliche

Olá eduardowm
Em primeiro lugar, o problema não está no ciclo loop. O ciclo loop não tem a tarefa de selecção de dados. Qual é o sentido de consumir recursos do PC manipulando dados no banco de dados, transferindo para a aplicação, para depois deixa-los de lado?
Você deve retirar do banco de dados somente os dados que deseja usar, e isso se faz na consulta:

E

Na realidade isso até não interferiu em nada, ja que eu passei os meu txt para uma variável e inseri no código sql.

As minhas referências são salvas como string.
O problema ta na hora de busca-las no banco.

Se eu usar somente o código

a pesquisa funciona perfeitamente. Eu pesquiso a ref 1, e me retorna o item 1, e assim por diante.

Porém eu quero pesquisar OU pela referência, OU pelo nome, só que no momento que eu mudo meu código para pesquisar também por produto.

o código basicamente seria

Só que quando vou pesquisar só a referência e digito 1, ele me retorna todos registros da tabela, não to acertando essa parte.
Alguém pode me dar uma ajuda nisso?

pmlm

Se só preenches a referencia, ficas com um sql do género

Isto, obviamente, devolve todos os registos da tabela…

Criado 8 de julho de 2012
Ultima resposta 10 de jul. de 2012
Respostas 3
Participantes 3