Olá, sou principiante e estou com uma dúvida sobre uma consulta com um formulário que possui 3 campos sendo o primeiro pelo nome, o qual está funcionando com o comando LIKE, porém quando digito apenas um dos outros dois critérios, obtenho o retorno de todos os dados do BD e não apenas os relativos ao critério escolhido, no caso CPF ou PRODUTO.
Connection conn;
conn = DriverManager.getConnection("jdbc:mysql://localhost/trocarefil","root","");
String query = "SELECT * from Clientes WHERE Nome LIKE ? or CPF = ? or Produto = ?";
PreparedStatement stmt;
stmt = conn.prepareStatement(query);
//Pega o texto digitado no campo de pesquisa Nome ou CPF ou Produto
stmt.setString(1,nome.getText()+'%');
stmt.setString(2,jTextField2.getText());
stmt.setString(3,jTextField3.getText());
ResultSet rs;
rs = stmt.executeQuery();
DefaultTableModel model;
model = (DefaultTableModel)jTable1.getModel();
model.setNumRows(1);
while (rs.next()){
model.addRow(
new Object[]{
rs.getString("Nome"),
rs.getString("Endereço"),
rs.getString("CPF"),
rs.getString("ClienteDesde"),
rs.getString("Produto"),
rs.getString("EmailCliente"),
rs.getString("TelefoneCliente"),
rs.getString("IdClientes"),
}
);
o erro está no SQL, veja que quando usa OR você está dizendo que qualquer uma das três opções servem, quando na verdade você só quer a que estiver com Jtextfield preenchido para buscar. Note que ao fazer a busca por cpf ele vai te retornar o registro, MAS também vai trazer tudo que tiver LIKE ‘%’ (ou seja tudo que tem no banco) já que seu campo nome estará vazio. Uma sugestão fácil e simples é realizar uma consulta separada para cada campo.
Antes de mais, qual é o resultado pretendido se eu preencher dois campos? Obter os registos que obedeçam obrigatoriamente a ambos os campos (construir query com AND) ou os registo que obedeçam a qualquer um dos campos (construir query com OR).
Depois, em qualuqer dois casos, só deves adicionar os campos à query se estiverem preenchidos.
Cláudio,
como o pmlm falou vc precisa primeiro saber como sua aplicação vai se comportar, por exemplo e se o usuário preencher 2 campos e clicar no botão de consulta, o que deve acontecer? A sugestão que eu te dei de separar as consultas também envolve criar condições. Já tive uma situação parecida com a sua, eu tinha 3 critérios de pesquisa ai fiz somente um campo para todas elas, no caso usei radioButton para o usuário selecionar o critério de pesquisa (por nome, por cpf, etc) ai de acordo com o critério selecionado eu passava o valor do Jtextfield para a consulta SQL específica.