Procurei pelo forum, porém a quantidade de retorno que recebo e não acho o que preciso… é enorme…
Seguinte… eu tenho um campo no banco de dados que é do tipo Long e por causa de conversões internas no sistema, preciso que o objeto seja uma string e na hora de inserir no banco preciso converte-lo para long, só que muitas vezes o valor resultará null mesmo e o banco já está programado para receber null, porém como é postgre, ele faz a verificação de tipo de campo para inserir no banco e não pretendo desligar a verificação…
Vamos ao problema… eu estou recebendo java.lang.NumberFormatException: null ao fazer um Long.parseLong quando o valor da String é null
Vamos por partes…
1 eu pego uma data no banco no formato aaaa-mm-dd hh:mm:ss
2 converto essa data para unixtime transformando em um long
3 eu jogo dentro de um setter que é uma string, porém quando o valor é null eu nao converto
4 jogo no statment para fazer o update no banco convertendo os longs que estão como string usando o parselong
Nesse momento da o problema quando tenho uma string null
Nao sei se consegui explicar bem… Mas To tentando…
Em relacao ao null. Porque voce nao cria outro metodo para obrigar o usuario a declarar essa data. Assim ela nunca iria ser null.
Estou sem entender uma coisa…
[quote=eaglebr]
Pq eu preciso q seja null mesmo, pois o campo é timstamp. Se eu colocar 0 vai gravar com data de 1970… [/quote]
Como voce vai fazer uma variavel long assumir um valor null sendo que esta nao pode assumir esse valor?
Mesmo usando conversao… Ate onde eu sei null nao existe em long.
“long” (primitivo) não pode receber valor null
Long ou “java.lang.Long” (wrapper) pode receber valor null
Para checar se um campo do banco de dados é null, você deve usar “wasNull” se o valor lido nesse campo for zero. Se foi zero, mas wasNull retornou true, então o valor não é zero e sim null.
Também fiquei um pouco confuso com esse negócio de o campo ser long, timestamp, etc.
Mas supondo que você tenha um campo long que quer setar como null, tente o setObject do Prepared Statement.
if (valorString == null) {
// Supondo que 3 é posição do parâmetro.
// Aqui coloquei o tipo BIGINT, procure na classe java.sql.Types aquele que corresponde ao tipo correto na base
preparedStatement.setObject(3, null, Types.BIGINT);
} else {
// Agora sim pode converter para long
preparedStatement.setLong(3, Long.parseLong(valorString));
}