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

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!

1 curtida

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

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.

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.

oi

já aconteceu comigo também.

quando mudei pro intellij parou

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

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 “”.

1 curtida

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.

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 cá já 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);
                 }
        }

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>

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.

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

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.