kaede
Outubro 14, 2008, 7:29am
#1
Amigos estou tentando fazer com que minha classe ClienteDAO faça consulta por caracter digitado em um caixa de texto. Esta funcionando quando faço consulta por nome mas tenho que digitar o nome inteiro, quero que quando digitado apenas uma parte da string faça a consulta ex: na vez de Carlos somente Car…minha classe DAO segue abaixo :
public Collection<ClienteVO> selectCliente(String comando,String valor){
Collection<ClienteVO> retorno = null;
Connection conexao = DAOConnection.getInstance();
if(conexao !=null){
try{
PreparedStatement pstmt = conexao.prepareStatement(
"SELECT * from clientes where "+comando+" =?");
pstmt.setString(1,valor);
retorno = criaColecaoCliente(pstmt.executeQuery());
}catch(SQLException sqle){
sqle.printStackTrace();
}
}
return retorno;
}
Obs: comando recebe valor nome da classe view e valor recebe o que foi digitado pelo usuário na caixa dde texto.
o like não resolve seu problema?
exemplo:
where nome like 'Car%'
ou seja, assim ele vai pegar qualquer Texto do campo Nome que começar com Car (Carol, Caroline, Carlos, Carvalho…) e assim vai.
Não seria melhor você fazer o select de todos os registros e filtrar apenas na collection do que fazer uma consulta no banco toda vez que uma letra fosse digitada?
dalvac
Outubro 14, 2008, 7:58am
#5
Esse link vai te ajudar:
http://www.htmlstaff.org/ver.php?id=437
De qq forma, seu código ficaria: (alterações na linha 9 e 10)
1. public Collection<ClienteVO> selectCliente(String comando,String valor){
2.
3. Collection<ClienteVO> retorno = null;
4. Connection conexao = DAOConnection.getInstance();
5.
6. if(conexao !=null){
7. try{
8. PreparedStatement pstmt = conexao.prepareStatement(
9. "SELECT * from clientes where "+comando+ " like ?" );
10. pstmt.setString(1, "%"+valor+"%");
11.
12. retorno = criaColecaoCliente(pstmt.executeQuery());
13.
14. }catch(SQLException sqle){
15. sqle.printStackTrace();
16. }
17. }
18. return retorno;
19. }
kaede
Outubro 14, 2008, 8:05am
#6
AIIII!!!funcionou isso que eu queria valeu!!!