Como deixar um date null (de verdade)?

Bom dia pessoal!

Estou com um pequeno problema. Estou atribuindo o valor “null” a uma
variável tipo “date”, mas na hora de usar essa variável em uma instrução
SQL (insert), surpresa! Não está null, mas “Thu Oct 19 09:46:16 GMT-03:00 2006”.

Como fazer com que a variável receba o null verdadeiramente?

[code]
if (data_realizacao.trim() != “”)
{
dt_realizacao = formataData(data_realizacao);
apostrofo = “’”;
}
else
{
dt_realizacao = null;
apostrofo = “”;
}

salva = “insert into teste values (Gen_ID(GST,1),”+apostrofo+dt_realizacao+apostrofo+"’)";

nsacc,

Infelizmente isso não é verdade. Quando você atribui null a uma variável date, ela está sempre null, pode confiar.

Eu acredito que seu código tenha um bug, e desconfio que seja no seu if:

if (data_realizacao.trim() != "")
{
   dt_realizacao = formataData(data_realizacao);
   apostrofo = "'";
}
else
{
   dt_realizacao = null;
   apostrofo = "";
} 

Não utilize != com Strings, porque se a instância não for a mesma, não vai ser igual nunca.

Tente mudar seu código para:

if (!data_realizacao.trim().equals("")) {
	dt_realizacao = formataData(data_realizacao);
	apostrofo = "'";
} else {
	dt_realizacao = null;
	apostrofo = "";
} 

e veja o que acontece, ok?

Abraços!

Em alguns bancos, certo tipos de date não suportam NULL, veja se é o seu caso na documentação de seu banco.

giovanni,

Pode até ser que o banco dele não aceite nulos, mas acho que o problema nem chega lá. Explico:

O if dele não está chegando na condição que deveria chegar quando o conteúdo da String está vazia e cai nessa parte:

    dt_realizacao = formataData(data_realizacao);
    apostrofo = "'";

Quando a função formataData dele é chamada, é criada uma data sem parâmetro, ou seja, a data corrente e daí vem o conteúdo “Thu Oct 19 09:46:16 GMT-03:00 2006”, certo?

:slight_smile:

Felipe e Giovanni,

Muito obrigado pelas observações!

Quanto ao banco de dados, estou utilizando o Firebird 1.5 e ele aceita o tipo date como null.

A sugestão do Felipe resolveu meu problema.