[Consulta] readByCriteria - Consulta SQL

6 respostas
Nicolas_Fernandes

Olá, galerinha!
Tudo bem?

Seguinte, estou com uma pequena dúvida; espero que possam me dar uma força!
Tenho um método em minhas classes DAO chamado readByCriteria. Ele recebe um objeto de uma classe espefícica e realiza uma consulta sob essa, de acordo com os valores contidos no objeto.
Por exemplo, tenho a classe Usuario:

public class Usuario {
   private Long id;
   private String nome;
   private String usuario;
   private String senha;
}

O meu readByCriteria tá ficando assim:

public List<Usuario> readByCriteria ( Usuario objUsuario ) {

   Connection connUsuario = ConnectionManager.getInstance().getConnection();
   String commUsuario = "Select Usuario.* From Usuarios Usuario Where 1=1 ";
   
   if ( objUsuario != null ) {

      if ( !objUsuario.getNome.equals("") ) 
         commUsuario += "And Upper(Usuario.Nome) Like '%" + objUsuario.getNome().toUpperCase() + "%'";
      if ( !objUsuario.getUsuario.equals("") ) 
         commUsuario += "And Upper(Usuario.Usuario) Like '%" + objUsuario.getUsuario().toUpperCase() + "%'";
   }
   commUsuario += " Order By Usuario.Nome";
   PreparedStatement statementUsuario = connUsuario.prepareStatement( commUsuario );
   // E por aí vai...
}

Percebam que eu faço a consulta somente por um dos campos!
Alguém tem alguma idéia de como posso modificar esse método, a fim de fazer com que minha consulta fique para pesquisar em todos os campos o mesmo texto digitado na caixa de texto?
Por exemplo, suponhamos que eu tenha estes dados:

ID     Nome              Usuario
1      José Mendes       jmendes
2      João Alberto      joaoalb
3      Maria Tereza      mariat
4      Pedro Rodrigues   pro
5      Thiago Motta      thiago_motta

Se o usuário digitar “jo” na caixa de texto, quero que ele pesquisa tanto no campo ‘nome’ quanto no campo ‘usuario’.
Alguém tem idéia de como criar um método readByCriteria que use Joins, ou Unions?
Como eu faria para esse meu readByCriteria fique do modo que procuro?

Desde já, grato pela atenção, galera!
Abraços a todos!

6 Respostas

D

A claúsula OR não resolve teu caso??
Ou nome e usuário são de tabelas diferentes?

Nicolas_Fernandes

O problema do uso da cláusula OR é quando eu pesquiso um nome nada a ver, que não tem em nenhuma tupla, saca?
Não dá certo :S

Se pesquisar “RONALDO”, por exemplo, fica na JTable com o último resultado exibido :S
Será que é erro de consistência?

D

Qual banco vc está usando??
Desculpa, ainda não entendi porque o OR não funciona.

Nicolas_Fernandes

Como você faria um readByCriteria com OR?

D

commUsuario += “And Upper(Usuario.Nome) Like '%” + objUsuario.getNome().toUpperCase() + “%’” +“OR”+ “And Upper(Usuario.Usuario) Like '%” + objUsuario.getUsuario().toUpperCase()+"%’";

Nicolas_Fernandes

A sua consulta tem OR e AND, seguidos um do outros, e isso dá problema ^^
Queria um jeito prático de fazer com OR… Estou tentando, mas tá ficando muito confuso :S

Any idea?

Criado 12 de maio de 2010
Ultima resposta 12 de mai. de 2010
Respostas 6
Participantes 2