Problema de Comparação de objeto com valor em Branco

4 respostas
NOM

Olá a todos, em uma classe DAO que criei, eu tenho dois metodos, um de inserir e outro de buscar, sendo que no metodo inserir eu faço uma busca do valor que esta sendo inserido para saber se ele já existe na base de dados, o problema é o seguinte: Eu não consigo comparar o objeto com o valor em branco, já coloquei equals e o == e nada.

[size=18][color=blue]Estou usando MVC, essa validação ficaria nessa classe mesma?[/color][/size]

[size=18][color=blue]Qual é o problema do código de não estar comparando com valor em branco?[/color][/size]
Segue a parte do codigo q esta com o problema:

public Vector<Ci> buscar(int numero) {   
	      conectar();   
	      Vector<Ci> resultados = new Vector<Ci>();   
	      ResultSet rs;   
	      try {   
	         rs = comando.executeQuery("SELECT * FROM ci WHERE numero = '"  
	               + numero + "%';");   
	         while (rs.next()) {   
	            Ci temp = new Ci();   
	          temp.setNumero(rs.getInt("numero"));   
	           resultados.add(temp);   
	         }   
	         return resultados;   
	      } catch (SQLException e) {   
	         imprimeErro("Erro ao buscar pessoa", e.getMessage());   
	         return null;   
	      }   
	  
	   }   
	  
	   public void insere(Ci ci){   
	      conectar();   
	      
	      DaoCi daoCi = new DaoCi();
	      daoCi.buscar(ci.getNumero());
	      /**######################################
#################################################
########## Aqui é o problema ##########################/
        if( daoCi.buscar(ci.getNumero()).equals("") ){
	    	
            try {   
			comando.executeUpdate("INSERT INTO ci(numero) VALUES('"  
			+ ci.getNumero() + "' )");   
			  System.out.println("Inserida!");   
			} catch (SQLException e) {   
			imprimeErro("Erro ao inserir CI", e.getMessage());   
			} finally {   
			fechar();   
			}
			      
	    }else{
	    	System.out.println("já tem"+daoCi.buscar(ci.getNumero()));  
	    }
   
	   }

4 Respostas

julianofischer

Olá amigo,
observe que o seu método retorna um Vector vazio caso não exista resultado ou nulo caso dê erro na base.
Ou seja, para verificar se existe uma tupla na base de dados que atenda as especificações da sua consulta você deve fazer:

if(daoCi.buscar(ci.getNumero()).size()>0){ //existe uma(s) tupla(s) }

observe também que como o resultado pode ser nulo caso ocorra alguma exceção, procure verificar se o o objeto não é nulo antes de invocar a função size, evitando assim uma NullPointerException.
Espero ter ajudado.

M

Antes de mais nadas, umas dicas:

Não use Vector, use ArrayList.
Não use Statement (nem concatene seus códigos SQL), use sempre PreparedStatement.
Sempre feche a conexão com finally (no método “insere” está OK, mas falta fazer o mesmo no método “busca”).
Nunca retorne ‘null’ quando se espera uma lista de algo. Isso pode causar uma NullPointerException indesejada. Retorne uma lista vazia ou lance a exceção.

Agora, o seu problema. O erro está na comparação. O seu método “buscar” retorna um Vector e você quer comparar isso com uma String. Impossível. O que você pode fazer é o que sugeriu o Juliano: verificar se a quantidade de registros retornados é ou não maior que zero.

S

Porque não deixa que o próprio banco faça essa verificação pra vc ?
Você não precisa ficar verificando a cada inserção.

NOM

Ola a Todos, obrigado pelas respostas, como em meu trabalho ninguem usa JAVA e não tenho pessoas proximas que programem, eu acabo cometendos esses erros! rsrsrs

Ao julianofischer :
[size=18][color=blue]Fiz o que vc falou e deu certo. Obrigado.[/color][/size]

Ao marcobiscaro2112:
[size=18][color=blue]Fiz o dever de casa e busquei a diferença entre o Vector e o ArrayList, modifiquei o código, obrigado por isso.
Eu retorno null mas tambem invoco o metódo imprimirErro que trata isso, mas pergunto, poderia manter esse retorno null?.[/color][/size]

Ao santos.fernando:
[size=18][color=blue]Poderi falar um pouco mais sobre isso, estou usando o mysql, só me dá uma ideia para eu começar.[/color][/size]

Segue o código alterado:

public Ci[] buscar(int numero) {   
	      conectar();   
	      
	      ResultSet rs;   
	      try {   
	    	 String sql = "SELECT * FROM ci WHERE numero = ? ";  
	    	 
	    	 PreparedStatement p = con.prepareStatement(sql);
	    	 p.setInt(1, numero);
	    	 
	         rs = p.executeQuery(); 
	         ArrayList<Ci> resultados = new ArrayList<Ci>();   
	         while (rs.next()) {   
	            Ci temp = new Ci();   
	     
	            temp.setNumero(rs.getInt("numero"));   
	            resultados.add(temp);     
	         }   
	         
	         return (Ci[])resultados.toArray(new Ci[0]);   
	      } catch (SQLException e) {   
	         imprimeErro("Erro ao buscar pessoa", e.getMessage());   
	         return null;   
	      }finally {   
				fechar();   
		   }   
	  
	   }   
	  
	   public void insere(Ci ci){   
	      conectar();   
	      
	DaoCi daoCi = new DaoCi();
      if( daoCi.buscar(ci.getNumero()).length==0 ){
	    	
            try {   
			comando.executeUpdate("INSERT INTO ci(numero) VALUES('"  
			+ ci.getNumero() + "' )");   
			    
			System.out.println("Inserida!");   
			} catch (SQLException e) {   
			imprimeErro("Erro ao inserir CI", e.getMessage());   
			} finally {   
			fechar();   
			}
			      
	    }else{
	    	System.out.println("já tem"+daoCi.buscar(ci.getNumero()));  
	    }
   
	   }
Criado 9 de julho de 2010
Ultima resposta 12 de jul. de 2010
Respostas 4
Participantes 4