Campo Integer para NULL

Boa tarde!
tenho um campo qualificacao no BD que é uma FK do tipo integer, este campo por padrão é NULL!
quando o usuario preencher o form ele poderá ou não, selecionar a qualificacao, dependendo do tipo de cadastro que o mesmo for fazer (ficaria muito extenso explicar o pq)
quando o usuario efetua o cadastro selecionando a qualificacao, salva perfeitamente. Meu problema está na hr que o campo fica vazio, como posso fazer para enviar NULL para o banco sendo que a minha classe recebe um valor Integer?
Oque eu preciso é: Quando o campo for vazio, passar de Integer para NULL para que eu possa salvar no BD.
Uso BD PostgreSQL e estou programando para desktop.
Se alguém puder me ajudar, ficarei grato.

Olá,

está usando hibernate?

poderia colar aqui a classe responsável por salvar essa informação no banco de dados?

Poste o erro que aparece ao tentar incluir o campo de qualificacao com valor nulo na base de dados…

O erro que gera é pq não estou enviando nenhum dado para o parametro 7.

org.postgresql.util.PSQLException: Nenhum valor especificado para parâmetro 7.

é que caso o valor for vazio eu preciso passar null para o BD. Só que não sei como fazer isso, pq na minha classe a qualificacao é do tipo Integer.

faça uma verificação e passe NULL se o campo vier em branco,

tipo obj.setValor(null);

olha só o que eu preciso:

ps = conexao.prepareStatement(incluiUsuario);
          
          ps.setInt(1, usuario.getUsuarioTipo().getCodigoUsuarioTipo());
          ps.setString(2, usuario.getNome());
          ps.setString(3, usuario.getLogin());
          ps.setString(4, usuario.getSenha());
          ps.setBoolean(5, usuario.isAtivo());
          ps.setString(6, usuario.getCrmvCrea());
          if(usuario.getUnidade()!= null){
             ps.setInt(7, usuario.getUnidade().getCodigoUnidade()); 
          }else{
             ?                   // só preciso passar NULL
          }

já tentou:


ps = conexao.prepareStatement(incluiUsuario);  
            
          ps.setInt(1, usuario.getUsuarioTipo().getCodigoUsuarioTipo());  
          ps.setString(2, usuario.getNome());  
          ps.setString(3, usuario.getLogin());  
          ps.setString(4, usuario.getSenha());  
          ps.setBoolean(5, usuario.isAtivo());  
          ps.setString(6, usuario.getCrmvCrea());  
          if(usuario.getUnidade()!= null){  
             ps.setInt(7, usuario.getUnidade().getCodigoUnidade());   
          }else{  
             ps.setInt(7, null);   
          }  

é só passar o valor null no else
tipo :

parametros.add(TO.getUnidade() != null ? new Integer(TO.getUnidade().getCodigo()) : null)

:wink:

só pra confirmar:
Deverei usar assim?
Caso não, qual seria a forma correta?

if(usuario.getUnidade()!= null){
    ps.setInt(7, usuario.getUnidade().getCodigoUnidade()); 
}else{
    ps.setInt(7,usuario.getUnidade() != null ? new Integer(usuario.getUnidade().getCodigoUnidade()) : null);   
}    

Não, ai você pode trocar todo seu if por essa linha:

  ps.setInt(7,usuario.getUnidade() != null ? new Integer(usuario.getUnidade().getCodigoUnidade()) : null);     

exatamente isso que o fabiozanardi disse, eu só tinha colocado o if de outra forma…
desse jeito creio que vá funcionar

Acredito que o método setInt recebe um int como parâmetro, não um Integer.
Sendo tipo primitivo, não pode ser nulo.

Tem que usar uma lógica assim:


  Integer valor = ....

  if ( valor == null )
    ps.setNull(indice, Types.INTEGER);
  else
    ps.setInt(indice, valor );

Resolvi desta forma:

if(usuario.getUnidade()!= null){
    ps.setInt(7, usuario.getUnidade().getCodigoUnidade()); 
}else{
    ps.setNull(7, 0);   
}    

E como eu poderia resolver com um campo String
tentei assim mas o campo não fica NULL.

if(usuario.getCrmvCrea() != null){
    setString(6, usuario.getCrmvCrea()); 
}else{
    ps.setNull(6, 0); 
}

[quote=alisson.schi]Resolvi desta forma:

if(usuario.getUnidade()!= null){
    ps.setInt(7, usuario.getUnidade().getCodigoUnidade()); 
}else{
    ps.setNull(7, 0);   
}    

E como eu poderia resolver com um campo String
tentei assim mas o campo não fica NULL.

if(usuario.getCrmvCrea() != null){ setString(6, usuario.getCrmvCrea()); }else{ ps.setNull(6, 0); } [/quote]
O segundo parametro é o tipo do campo:


if(usuario.getUnidade()!= null){
    ps.setInt(7, usuario.getUnidade().getCodigoUnidade()); 
}else{
    ps.setNull(7, java.sql.Types.INTEGER);   
}    

Acho que vc não entendeu.
Para o campo Integer tá resolvido, coloquei como o amigo AbelBueno citou acima

if(usuario.getUnidade()!= null){   
    ps.setInt(7, usuario.getUnidade().getCodigoUnidade());   
}else{   
    ps.setNull(7, Types.INTEGER);     
}      

eu gostaria de saber como faço para o campo String.
tentei colocar assim, mas não grava null no banco, não dá erro mas o campo fica vazio e eu preciso que fique NULL

if(usuario.getCrmvCrea() != null){   
    setString(6, usuario.getCrmvCrea());   
}else{   
    ps.setNull(6, Types.VARCHAR); // tambem coloquei Types.CHAR   
}  

Vc já tentou da forma que tinha falado antes?

if(usuario.getUnidade()!= null){ ps.setInt(7, usuario.getUnidade().getCodigoUnidade()); }else{ ps.setNull(7, null); }

[quote=alisson.schi]Acho que vc não entendeu.
Para o campo Integer tá resolvido, coloquei como o amigo AbelBueno citou acima

if(usuario.getUnidade()!= null){   
    ps.setInt(7, usuario.getUnidade().getCodigoUnidade());   
}else{   
    ps.setNull(7, Types.INTEGER);     
}      

eu gostaria de saber como faço para o campo String.
tentei colocar assim, mas não grava null no banco, não dá erro mas o campo fica vazio e eu preciso que fique NULL

[code]
if(usuario.getCrmvCrea() != null){
setString(6, usuario.getCrmvCrea());
}else{
ps.setNull(6, Types.VARCHAR); // tambem coloquei Types.CHAR
}

[/code][/quote]
Cara provavelmente sua String esta vazia:

if(usuario.getCrmvCrea() != null && !usuario.getCrmvCrea().isEmpty()){ ps.setString(6, usuario.getCrmvCrea()); }else{ ps.setNull(6, Types.VARCHAR); // tambem coloquei Types.CHAR }