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)
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
}