Gravar campo vazio no PostgreSQL [Resolvido]

8 respostas
dinho1903

Pessoal, estou com problemas para salvar campos em branco no banco.

Exemplo:

...
String sqlinsert = "INSERT INTO clientes( \"NOME\", \"CPF\", \"CIDADE\" ) VALUES ('"+
tf_nome.getText()+"', '"+
ftf_cpf.getText() +"', '"+
tf_cidade.getText() +"')";

conCliente.update(sqlinsert);
...

Nome e CPF são notnull, faço a verificação, o problema é no campo cidade, que pode ser nulo. E quando nulo, ele salva no banco duas aspas ‘’.

O SQL gerado é INSERT INTO clientes( “NOME”, “CPF”, “CIDADE” ) VALUES (‘Dinho’, ‘[CPF removido]’, ‘’)

Se inserir essa linha pelo pgAdmin, também será armazenado as aspas no campo cidade.
Como fazer para inserir um valor vazio no banco?

Obrigado!

8 Respostas

drsmachado

Campo nullable pode ser omitido na cláusula insert.

drsmachado
INSERT INTO clientes( "NOME", "CPF") VALUES ('Dinho', '[CPF removido]',)
dinho1903

drsmachado:
INSERT INTO clientes( "NOME", "CPF") VALUES ('Dinho', '[CPF removido]',)

Sim, mas para fazer isso teria que verificar se o campo é vazio, certo?
O problema é que tenho vários campos, não apenas esses três…

drsmachado

dinho1903:
drsmachado:
INSERT INTO clientes( "NOME", "CPF") VALUES ('Dinho', '[CPF removido]',)

Sim, mas para fazer isso teria que verificar se o campo é vazio, certo?
O problema é que tenho vários campos, não apenas esses três…


A questão é que você cria esse cara no java, então, pode verificar se está ou não vazio.

...
if(valorDoCampoVazio != null || !"".equals(valorDoCampoVazio)){
   //insere a parte da string que irá inserir o campo
}//senão. não insere...
...
dinho1903

drsmachado:
dinho1903:
drsmachado:
INSERT INTO clientes( "NOME", "CPF") VALUES ('Dinho', '[CPF removido]',)

Sim, mas para fazer isso teria que verificar se o campo é vazio, certo?
O problema é que tenho vários campos, não apenas esses três…


A questão é que você cria esse cara no java, então, pode verificar se está ou não vazio.

... if(valorDoCampoVazio != null || !"".equals(valorDoCampoVazio)){ //insere a parte da string que irá inserir o campo }//senão. não insere... ...

Entendi… Pensei em fazer isso… Mas achei meio POG. hehehehehe
Será que não existe alguma configuração no PostgreSQL?

drsmachado

No MySQL eu consigo fazer

INSERT INTO (col1, col2, colNull) values ('1', 'Teste', null)

Já no PG, não sei.

dinho1903

Consegui!!!

A solução foi dar um replaceAll na String sqlinsert, trocando as duas aspas ‘’ pelo valor null:

conCliente.update(sqlinsert.replaceAll("''", "null"));

Obrigado amigo drsmachado pela atenção! :smiley:

A

Recomendo que utilize um PreparedStatement ao invés do Statement para isso.

Assim, se a string for nula, ele gravará automaticamente no banco como nulo.

Mas atenção a isso.

Há bancos de dados que tratam Null e uma String vazia como a mesma coisa.
(Bem, o Oracle faz isso)

Se o PostgreSQL faz diferença entre esses valores, seu código java tem que diferenciar também.

Quando dá um getText() não está vindo um valor null e sim um valor vazio.
Pra tratar isso só com if mesmo.

Criado 26 de junho de 2012
Ultima resposta 26 de jun. de 2012
Respostas 8
Participantes 3