qual seria a melhor forma de se fazer…digamos assim uma consulta bem dinamica…ou seja…onde o usuario possa escolher e formar um conjunto de campos e valores que ele quer pesquisar…
por exemplo…
poder escolher se quer pesquisar por:
só nome , ou
só idade, ou
nome + idade + sexo (nome =“x” and idade=0 and sexo = M) , ou
nome + sexo + cep…
resumindo…como eu poderia criar uma instruçao sql dinamica em um metodo…que dependesse dos valores digitados e campos escolhidos dinamicamente…???
eu teria que fazer por exemplo um overloading de metodo para o numero de parametos …?ou existe alguma forma simples de fazer com que a consulta SQL seja bem dinamica??
Quando eu precisei fazer algo do tipo eu simplesmente fui montando a String dinamicamente.
Naquele caso, eu havia criado um método para montar a String da parte “SELECT…” outro para a parte “FROM…” outro com o “WHERE…” e outro com o “ORDER BY…” e fui manipulando a String em cada um até formar meu SQL completo.
Olá,
Pelo visto vc está querendo implementar um esquema de filtro, onde o usuario pode “montar” um filtro para o seu sistema trazer os dados.
As aplicações comerciais geralmente têm essa funcionalidade, e na grande maioria isso é implementado usando-se uma GUI onde o se tem uma lista de campos ( geralmente pseudônimos, não os nomes das colunas propriamente dito ), um combo-box com alguns operadores booleanos como Maior, Menor, Maior igual, Menor igual, Contendo … e outro com os operadores lógicos E, OU .
Dessa forma o usuário monta o filtro com os campos disponiveis e vc faz uma especie de analizador que vai transformar as referencias em nome de colunas e os operadores e montar o WHERE de sua query.
Esse tipo de recurso é muito poderoso e dá muita liberdade ao usuario final de sua sistema.
Para um projeto que estou fazendo pensei que poderia querer uma funcionalidade assim tambem. Crei algumas classes para representar sqls dinamicos, assim nao preciso fazer hardcode nas classes de negocio.
Nunca usei essas classes, apenas codei elas, portanto nao estao 100% ainda… mas ja servem como uma possivel ideia. Para ver como usar, eh soh ler o source.
Aqui na empresa precisei fazer algo parecido e não tinha muito tempo p/ resolver.
Nos usamos banco Oracle então eu montei a query passando parametros em todos os campos que pederiam restringir a consulta e utilizava a função NVL.
Ex:
SELECT...
FROM...
WHERE coluna1 = NVL("parametro1", coluna1)
AND coluna2 = NVL("parametro2", coluna2)
AND coluna3 = NVL("parametro3", coluna3)
AND ...
Com essa função se o parametro estiver nulo ele compara com a propria coluna.Se vc utiliza outro bd deve ter uma função parecida.
Não sei se era a melhor solução, mas como falei não tinha muito tempo p/ procurar uma solução melhor e por enquanto resolveu.
Talves alguem tenha uma solução melhor.
Espero ter ajudado.