Ajuda para filtro

9 respostas
cristianoventura

Pessoal estou com um problema na hora que vou fazer uma filtro pelo nome no meu aplicativo utilizando Flex quando eu pesquiso,o grid me retorna com um valor 0.Acredito que o problema seja no java,pois quando pesquiso por um valor de tipo integer não tenho problema.

public static Cliente pesquisar (String nome) {
		Cliente cliente = new Cliente();
		 
		try{
			String sql = "select  codigo,nome,cpf  from cliente where Nome like UPPER(?)";
			Connection conn = ConnectionFcatory.getConnection();
			PreparedStatement stmt = conn.prepareStatement(sql);
		   
		    stmt.setString(1,'%'+nome+'%'); 
			ResultSet res = stmt.executeQuery();
			if (res.next()){
				cliente.setCodigo(res.getInt("CODIGO"));
				cliente.setNome(res.getString("NOME"));
				cliente.setCpf(res.getString("CPF"));		
			}
			stmt.close();
			res.close();
			conn.commit();
		} catch (SQLException e){
			e.printStackTrace();
		}
	
		
		return cliente;
	}

9 Respostas

Ivan_Alves

Cara não tenho tanta certeza disso mais tente tirar o UPPER(?) ai da sua consulta e deixe a consulta assim

e na hora de passar o parametro assim

cristianoventura

Ivan tentei de varias formas cara fiz do jeito que vc flw tb deu mesmo erro.

Guip08

Tenta

cliente.setCodigo(res.getInt("codigo"));
cliente.setNome(res.getString("nome"));
cliente.setCpf(res.getString("cpf"));
ssh

Cara, achei esquisito essa sua linha:

stmt.setString(1,'%'+nome+'%');

tente mudar para:

stmt.setString(1,"'%'"+nome+"'%'");

Até mais

Ivan_Alves

No meu funciona assim certim, no banco de dados MySQL e SQLServer
Mudou a passagem de parâmetros em vez de aspas simples para aspas duplas?? assim:

Tente também executar o depurador e verificar o valor do parâmetro passado se tem alguma coisa para buscar que contenha esse nome no banco e se ele entre no loop!

horochovec

Isso pode variar de SGDB para SGDB… Por exemplo, o Postgres possui uma função chamada ILIKE que trata automaticamente o maiúsculo/minúsculo de uma string.

Se você usar LIKE = ‘%stefan%’, ele vai retornar qualquer conteúdo que contenha stefan tanto a esquerda quando a direita da String.

Se você usar LIKE = ‘stefan%’, ele vai retornar qualquer conteúdo que contenha stefan no início da string.

Se você usar LIKE = ‘%stefan’, ele vai retornar qualquer conteúdo que contenha stefan no final da string.

Tenta assim:

String sql = "select  codigo,nome,cpf  from cliente where UPPER(Nome) like ?";
Connection conn = ConnectionFcatory.getConnection();  
PreparedStatement stmt = conn.prepareStatement(sql);  
stmt.setString(1,nome.toUpperCase());
cristianoventura

Tentei dessa forma Também Stefan,porém da erro.
no meu flex coloquei o seguinte evento.

public function  pesquisar_cliente():void {
  		
  		cliente = new Cliente();
  	   
  	    conectarjava.pesquisar(String(ti_pesquisa.text));
  	
  	
  		}
private function ResultadoPesquisa(event:ResultEvent)  
             {    
		       //primeiro pegue o resultado    
		       //caso esteja retornando o tipo Cliente que  está mapeado corretamente no Flex faça isso    
		    
		       var clienteAux:Cliente = event.result as Cliente; //convertendo objeto recebido, caso não receba nada esse objeto irá receber null    
		       if(clienteAux != null){    
		             dados_cliente.removeAll(); //limpa a lista e com ela sua datagrid    
		             dados_cliente.addItem(clienteAux); //adiciona seu objeto recebido
		            Alert.show("Cliente com id "+clienteAux.nome);  
		       }else{    
             	Alert.show("Sua pesquisa não retornou resultado!!!");    
              }    
        }
Código Java
public static Cliente pesquisar (String nome) {
		Cliente cliente = new Cliente();
		 
		try{
			String sql = "select  codigo,nome,cpf  from cliente where UPPER(Nome) like ?";
			Connection conn = ConnectionFcatory.getConnection();
			PreparedStatement stmt = conn.prepareStatement(sql);
		   	stmt.setString(1,nome.toUpperCase());  
			ResultSet res = stmt.executeQuery();
			if (res.next()){
				cliente.setCodigo(res.getInt("CODIGO"));
				cliente.setNome(res.getString("NOME"));
				cliente.setCpf(res.getString("CPF"));		
			}
			stmt.close();
			res.close();
			conn.commit();
		} catch (SQLException e){
			e.printStackTrace();
		}

Tentei dessa forma Stefan que você passou mais estar dando Erro.O meu método pesquisar_cliente.Tem alguma coisa errada com ele?

o grid me retorna um valor 0 conforme a imagem nesse link

[url]http://imageshack.us/f/811/erroflex.jpg/[/url]

Ivan_Alves

provavelmente seu erro pode está nesse trexo já que ele te retorna o resultado

if (res.next()){ cliente.setCodigo(res.getInt("CODIGO")); cliente.setNome(res.getString("NOME")); cliente.setCpf(res.getString("CPF")); }
Algumas dicas são:
-tente mudar os campos recebidos para que ficam todos em minúsculo, igual você faz a pesquisa.
-Verifique os métodos sets
-tente também executar esse código no seu banco
tente passar com o debugador ai, caso tenha impresso algum erro coloca ai para analisarmos melhor!

cristianoventura

O meu sistema esta pesquisando pelo nome mais gostaria de saber como faço para que a consulta pesquise pelo maiúsculo e minúsculo segue o meu código para que vocês me ajudem obrigado.

public static Cliente pesquisar (String nome) {
		Cliente cliente = new Cliente();
		 
		try{
			String sql = "select  codigo,nome,cpf  from cliente where  upper(nome) like ?";
			Connection conn = ConnectionFcatory.getConnection();
			PreparedStatement stmt = conn.prepareStatement(sql);
			   stmt.setString(1, "%" + nome + "%");   
			ResultSet res = stmt.executeQuery();
			if (res.next()){
				cliente.setCodigo(res.getInt("codigo"));
				cliente.setNome(res.getString("nome"));
				cliente.setCpf(res.getString("cpf"));		
			}
			stmt.close();
			res.close();
			conn.commit();
		} catch (SQLException e){
			e.printStackTrace();
		}
	
		
		return cliente;
	}
Criado 17 de outubro de 2011
Ultima resposta 26 de out. de 2011
Respostas 9
Participantes 5