Olá. Estou fazendo um sistema, onde o usuario pode ou não digitar varias datas no cadastro de pessoa.
Quando ele tentar salvar o formulário sem digitar uma das datas, como faço para passar a data em questão em branco para o banco de dados?
Já tentei com “” e null. Ambas deram erro.
Desde já, muito obrigado!!
[quote=cembjr]Olá. Estou fazendo um sistema, onde o usuario pode ou não digitar varias datas no cadastro de pessoa.
Quando ele tentar salvar o formulário sem digitar uma das datas, como faço para passar a data em questão em branco para o banco de dados?
Já tentei com “” e null. Ambas deram erro.
Desde já, muito obrigado!![/quote]
Que erro? Suas datas estão como not null no banco?
coloca ai a mensagem de erro que vc está recebendo!
como o digaoneves disse, seu campo no banco deve estar not null e não está deixando salvar uma data nula!
Não está. Só o id que é not null
Este é o erro
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at controller.PessoaDb.inserePessoa(PessoaDb.java:23)
No metodo inserePessoa() da PessoaDb, eu jogos os campos da classe Pessoa.
Na pessoa estou fazendo o seguinte para setar as datas.
if(!data_emissao.getText().equals(" - - "))
{
d = dB.parse(data_emissao.getText());
String a = dA.format(d);
this.data_emissao = dA.parse(a);
} else this.data_emissao = null;
Se a data não for digitada ele joga null no PrepareStatement.
Alguma sugestão?
Tem alguma forma de eu setar um Date em branco para mandar para o banco? Tbm seria uma opção
O problema não está em gravar as datas no banco, você nem chegou nisso ainda.
Está sendo lançada uma NullPointerException que indica que alguma variável que você está manipulando está nula, provavelmente esta data. você tenta fazer algo com ela depois que a seta para null ?
Ai é que está! O que eu quero é se o usuario não digitar a data, o sistema salvara do mesmo jeito! Mas com as outras podem pegar valores em branco, já data não!
Unica maneira de resolver o problema que encontrei é informar uma data qualquer no set. Exemplo : “11-11-1111”.
O problema é que ficara estranho ao listar os dados
Alguem tem mais alguma sugestão?
Amigo,
Você esta utilizando JDBC para gravar no banco???
Você pode deixar a propriedade do objeto null, mas ao gravar no banco terá de permitir null na tabela e utilizar o setNull do PreparedStatement (se estiver usando jdbc).
Posta o código que esta gravando no banco…
Este é o que eu uso no PrepareStatement
con = Conexao.conectar();
String sql = "INSERT INTO pessoa (id,id_domicilio,nome,data_nascimento,sexo)"
+ " VALUES(default, ?, ?, ?, ?)";
PreparedStatement ps = (PreparedStatement) con.prepareStatement(sql);
ps.setInt(1, p.getId_domicilio());
ps.setString(2, p.getNome());
java.sql.Date d = new java.sql.Date(p.getData_nascimento().getTime());
ps.setDate(3, d);
ps.setString(4, p.getSexo());
ps.execute();
Até ai se o usuario digitar uma data tudo bem! mais oque eu posso fazer para passar esse ps.setDate() com valor em branco caso não digite nada?
Eu fiz a um tempo atras um sistema em delphi, e a unica forma que achei foi colocar uma data qualquer quando o usuario não digitasse, mais neste queria fazer um sistema sem gambiarras! kkk
Desde já, muito obrigado!!!
[quote=cembjr]Este é o que eu uso no PrepareStatement
con = Conexao.conectar();
String sql = "INSERT INTO pessoa (id,id_domicilio,nome,data_nascimento,sexo)"
+ " VALUES(default, ?, ?, ?, ?)";
PreparedStatement ps = (PreparedStatement) con.prepareStatement(sql);
ps.setInt(1, p.getId_domicilio());
ps.setString(2, p.getNome());
java.sql.Date d = new java.sql.Date(p.getData_nascimento().getTime());
ps.setDate(3, d);
ps.setString(4, p.getSexo());
ps.execute();
Até ai se o usuario digitar uma data tudo bem! mais oque eu posso fazer para passar esse ps.setDate() com valor em branco caso não digite nada?
Eu fiz a um tempo atras um sistema em delphi, e a unica forma que achei foi colocar uma data qualquer quando o usuario não digitasse, mais neste queria fazer um sistema sem gambiarras! kkk
Desde já, muito obrigado!!![/quote]
Amig, faz assim:
if (p.getData_nascimento() != null) {
java.sql.Date d = new java.sql.Date(p.getData_nascimento().getTime());
ps.setDate(3, d);
} else {
ps.setNull(3, Types.DATE);
}
Se o tipo do banco de dados for outro, troque Types.DATE para ele, por exemplo Types.TIMESTAMP.
Outra forma seria você utilizar o setObject (que trabalha com null), mas para isso deveria fazer o tratamento da construção da data, por exemplo:
java.sql.Date d = null;
if (p.getData_nascimento() != null) {
d = new java.sql.Date(p.getData_nascimento().getTime());
}
ps.setObject(3, d);
Esse tratamento poderia ficar em uma classe a parte.
Muito obrigado jmmenezes!!! Funcionou certinho!!! Valew mesmo amigo