Pesquisa genérica com PreparedStatement

3 respostas
J

Bom dia a todos,

Estou estudando a apostila do curso FJ-21 (Java Web) da Caelum e surgiu uma dúvida sobre o uso de PreparedStatement em consultas ao banco de dados.

Considerem uma tabela T com os campos (C1, C2, C3, C4). Gostaria que a aplicação que usa essa tabela fosse capaz de fazer uma pesquisa personalizada pelo usuário, ou seja, o usuário teria a liberdade de escolher por qual/quais campos ele deseja fazer a pesquisa e de que forma combinar esses campos (AND/OR).

Exemplificando:
[list]O usuario deseja obter todos os registro em que o campo C1=‘x’.
Para isso usaria a seguinte string: “SELECT * FROM T WHERE C1=‘x’”[/list]
[list]Agoram o usuario deseja obter todos os registro em que o campo C1=‘x’ e o campo C3=‘y’.
Nesse caso a string ficaria assim: “SELECT * FROM T WHERE C1=‘x’ AND C3=‘y’”[/list]
Como isso deve ser implementado para que essa funcionalidade esteja disponível? Devem ser feitas strings de pesquisa SQL para cada caso de busca, o que considero meio absurdo, ou existe uma forma de trabalhar com o PreparedStatement que possibilita que isso seja feito mais facilmente?

Obrigado,
[]'s

3 Respostas

janjan

tela||
campo 1=valor1
campo 2=null
campo3=valor3
||

classe da regra de negocio

if(campo1 !=null)
sql.append(" and campo1 =’"+ campo1.getValue()+"’ ");

etc…
preparedStatement nao sei se é capaz disso…

J

janjan:
tela||
campo 1=valor1
campo 2=null
campo3=valor3
||

classe da regra de negocio

if(campo1 !=null)
sql.append(" and campo1 =’"+ campo1.getValue()+"’ ");

etc…
preparedStatement nao sei se é capaz disso…

É uma solução interessante janjan, obrigado pela ajuda!

Ninguém mais sabe se é possível usar PreparedStatement?

R

O ideal é montar a consulta na aplicação, como no exemplo do post anterior, e passar a string da consulta pronta para o método executeQuery da interface Statement.

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

ResultSet srs = stmt.executeQuery(“SELECT * FROM T WHERE C1=‘x’ AND C3=‘y’”);

Se for vc acha que sua aplicação terá várias situações diferentes para várias telas, é melhor implementar uma classe que receba os objetos e crie uma query conforme a situação dos atributos.

Desconheço se a PreparedStatement tem funcionalidade para isso.

Criado 1 de agosto de 2009
Ultima resposta 2 de ago. de 2009
Respostas 3
Participantes 3