Lendo variável nula como aspas duplas ("")

12 respostas
adautodasilvalima

Boa tarde.

Estou enfrentando problemas na programação, mais especificamente com parâmetros de queries.
Quando uma variável recebe (null), meu eclipse (ou não sei se é o windows) não entende a variável assim, e coloca aspas duplas ("") na variável e aí o problema.
Exemplo:

String teste = null;

meu computador entende e coloca assim:

String teste = "";

Null é diferente de “” então o parâmetro entra na querie com aspas duplas e aí zica tudo.

Alguém sabe se isso é configuração do eclipse ou do windows(10) ou o quê?
Meu Eclipse é Version: Oxygen.3a Release (4.7.3a)

Obrigado!

12 Respostas

staroski

Posta um exemplo de query onde você recebe/passa null e está virando "".

adautodasilvalima

Pois não

StringBuilder sb = new StringBuilder("");
sb.append("SELECT TABELA ");
sb.append(" aitCad.numeroAIT, aitCad.placa, proc.numeroProcesso, proc.anoProcesso, ");
sb.append(" numAIT.codigo, numAIT.descricao, aitCad.codigoDesdobramento, aitCad.codigoEnquadramento, ");
sb.append(" proc.status, aitCad.dataInfracao, aitCad.dataLimiteCadastro, proc.dataCadastro, ");
sb.append(" proc.dataProcesso) FROM ProcessoAIT proc ");		
sb.append(" INNER JOIN proc.aitNaoCadastrado aitCad ");	
sb.append(" INNER JOIN aitCad.orgao org ");
sb.append(" INNER JOIN aitCad.municipioInfracao numAIT ");
sb.append(" WHERE 1 = 1 ");

Map<String, Object> params = new HashMap<String, Object>();

Aqui abaixo que dá o problema. Está perguntando se o numeroAIT for diferente de null.
O numeroAIT está = "", que é diferente de null.
Aí a clausula abaixo entra no SQL erroneamente.

if (numeroAIT != null) {
	List<String> numerosAIT = AITPrefeituraUtils.getVariacoesAutoInfracao(numeroAIT);
	sb.append(" AND aitCad.numeroAIT IN (:numerosAIT) ");
	params.put("numerosAIT", numerosAIT);
}

PS: Quando passo o mouse encima da variável numeroAIT ela está com valor (" ") aspas duplas.

O Eclipse ou sei lá quem não admite null. Este parametro vem de uma chamada deste tipo:

public List<ProcessoAITNaoCadastradoVO> findProcAITNaoCadastrado(String numeroAIT, String placa, 
		Integer numeroProcesso, Integer anoProcesso, Long idMunicipioInfracao,
		FiltroStatusProcAITNaoCadastrado status, Date dataInicialInfracao, Date dataDataFinalInfracao) {
	
	List<ProcessoAITNaoCadastradoVO> procAitsNaoCadastrados = processoAITDAO.findProcAITNaoCadastrado(numeroAIT, 
			placa, numeroProcesso, anoProcesso, idMunicipioInfracao, status, dataInicialInfracao, dataDataFinalInfracao);
		
		return procAitsNaoCadastrados;
}

Em todos os fontes de colegas aqui quando não se passa nada para a String ela fica como null, só comigo fica com aspas duplas.
Acho que eu tenho um “X” nas costas.

staroski

Quem está chamando o método findProcAITNaoCadastrado é que está passando "" ao invés de null.

Posta o(s) código (s) que chama(m) esse método.

R

oi

já aconteceu comigo também.

quando mudei pro intellij parou

staroski

Posta os códigos onde você chama esse método passando a String.

darlan_machado

Creio que você não esteja passando uma String nula, mas, o resultado da invocação de um método como o getText de um JTextField ou outro componente.
O que ocorre é que quando você não insere nada no JTextField ele devolve uma String vazia, as famosas “”.

adautodasilvalima

Boa tarde Darlan!!!

Obrigado por responder.
Mas eu não estou usando DeskTop, é Web.
No código acima da pra você ver um exemplo.
Eu vou completar postando de onde a variável está vindo.

adautodasilvalima

Aqui tem um exemplo mais prático que aponta o mesmo erro:

public class ProcessoCetranAITMB extends AbstractPrefeituraMB  {

             private String filtroPlaca;

             ** Primeiro de tudo passa aqui.**
             public void doClear() {
        	       filtroNumeroAIT = null;
        	       filtroPlaca = null;
        	       filtroProcesso = null;
        	       filtroProtocolo = null;
            }
** Depois vem pra   zuado.**
public void doQuery() throws ProcessoAITCetranException {
        	      if (validateForm()) {
**Tive que colocar este if pra consertar:**
if (filtroProcesso.equals("")) {
                             **filtroProcesso = null;
                      **}
        			
        	              processos = processoAITCetranSB.findProcessosCETRAN(
        		            filtroNumeroAIT, 
        		            filtroPlaca, 
        		            filtroProtocolo,
        		            filtroMunicipio == null ? null : filtroMunicipio.getId(),
        		            getCurrentOrgaoId());
           	     } else {
        	          showErrorMessage(mensagemErro, true);
                 }
        }
Lucas_Camara

Seu sistema usa JSF? Se sim, vc consegue arrumar isso com essa configuração:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>
adautodasilvalima

Olá Lucas!

Tem mais três desenvolvedores aqui dando manutenção no mesmo sistema.
Em nenhuma máquina acontece isso só na minha.
Por isso eu estava achando que pudesse ser alguma configuração do Eclipse ou Windows10.
Aqui a desculpa é diferente: Na minha máquina “não funciona”. rsrs.

Lucas_Camara

Essa mudança ocorre de forma automática logo após vc digitar o código?

adautodasilvalima

Sim, neste local em que é chamado o método eu não digito nada, então a variável teria que estar null.
mas se apresenta como aspas duplas.

Criado 23 de outubro de 2019
Ultima resposta 24 de out. de 2019
Respostas 12
Participantes 5