Valor "nulo" do select para o banco de dados

Boa noite, estou com uma duvida sobre um sql. A questao é a seguinte: Tenho um sistema de busca de imvoeis em um form html com quatro filtros diferentes(operacao, tipo, cidade e dormitorios), mas esses quatro filtros nao serão utilizados todos juntos em todas as pesquisas. por exemplo posso fazer uma pesquisa usando apenas o filtro cidade. Como eu vou fazer o select se eu nao sei quais filtros o usuario vai usar? crio um if para cada possibilidade? ou existe algum valor que passe despercebido pelo banco. Exemplo, se o filtro nao for usado passo um valor, como se fosse o *, que seleciona todos os registros daquele filtro. Entenderam a minha duvida?

Geralmente essa necessidade é chamada de pesquisa dinâmica.
Procure por “sql pesquisa dinâmica” no google se quiser mais detalhes e exemplos.

Em resumo, geralmente você cria sim um if para cada valor.
Geralmente no formato:
if (usuario passou valor de filtro A) adicionoNaQueryFiltroA
if (usuario passou valor de filtro B) adicionoNaQueryFiltroB

Não esqueça de usar sempre PreparedStatement e não concatenar o valor informado pelo usuário com a query em si.

Concordo com o AbelBueno.
Quando eu trabalhava com JDBC, ADO.NET ou qualquer ferramenta que não ORM’s, eu fazia minhas pesquisas dinâmicas dessa forma:

  1. Para o meu método de pesquisa, eu passava um dicionário de informações relativas à pesquisa;
  2. Através de cláusulas if, verificava cada uma das possibilidades de pesquisa, e adicionava-as ao PreparedStatement;
  3. Executava a operação com os filtros que foram adicionados.

Basicamente (exemplo em Java, talvez fique melhor para você entender):

  1. No seu evento de pesquisa:Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("filtroUm", valorUm); parameters.put("filtroDois", valorDois);2. No meu método de pesquisa:[code]public List pesquisarDinamicamente(Map<String, Object> parameters) {

    String sentence = “SELECT * FROM TABELA WHERE 1 = 1”;
    if (parameters.containsKey(“filtroUm”) {
    sentence = String.format("%s AND PARAMETROUM = %s", sentence, parameters.get(“filtroUm”));
    }
    if (parameters.containsKey(“filtroDois”) {
    sentence = String.format("%s AND PARAMETRODOIS = %s", sentence, parameters.get(“filtroDois”));
    }
    if (parameters.containsKey(“filtroTres”) {
    sentence = String.format("%s AND PARAMETROTRES = %s", sentence, parameters.get(“filtroTres”));
    }

    PreparedStatement statement = connection.prepareStatement(sentence);
    // faz todo o resto da operação.
    }[/code]
    Lógico que dá pra aprimorar: usar de forma mais eficiente o PreparedStatement, trocar o uso de concatenação de strings, mas a ideia é basicamente essa.

Espero ter ajudado,
fique com Deus! :smiley:

ok, a minha ideia de um if para cada alternativa era mais complexa…assim fica mais simples. vlw.Abraços