Problema com DATA, na inserção ao BD postgre

11 respostas
V

Boa noite pessoal.. sou novato em programação e estou com problemas num formulário de cadastro bem simples.

Não estou conseguindo salvar a data neste formato dd/mm/yyyyy (10/09/2012). Estou quebrando a cabeça, já li, pesquisei, tentei e sem sucesso.
Mas quando vai no formato yyyy-mm-dd (2012-09-10) funciona na boa.

Tenho os seguintes: Uma tabela no Postgre
CREATE TABLE pesfisica
(
dt_nascimento date NOT NULL
)
Uma classe modelo chamada pessoaFisica -uma parte dela-
import java.sql.Date;
private Date dt_nascimento;
public Date getDt_nascimento() {
		return dt_nascimento;
	}

	public void setDt_nascimento(Date dt_nascimento) {
		this.dt_nascimento = dt_nascimento;
	}
Uma html com o campo para preencher a data
<table>
	<tr>
		<td><div>Data de Nascimento*</div></td>
        <td><input type="text" name="dt_nascimento" size="12" maxlength="10" onkeyup="FormataData(this,event)" onkeypress='return SomenteNumero(event)' />
        <font color="#cccccc"  size="2"  face="Verdana" >&nbsp;dd/mm/aaaa</font></td>
	</tr>
</table><br>
Um controle que recebe da html e joga para o DAO
pesf.setDt_nascimento(Date.valueOf(request.getParameter("dt_nascimento")));
DAO
public void save(PesFisica pesf) {
		Session session = HibernateUtil.getSession();
		Transaction transaction = session.beginTransaction();
		session.save(pesf);
		transaction.commit();
		return;
	}
A mensagem de erro quando coloco a data por exemplo 10/09/2012
at java.sql.Date.valueOf(Unknown Source)

Toda dica é bem vinda, agradeço desde já.

11 Respostas

E

Tente usando o java.util.Date ao invés do Date do sql.

V
Alterei como havia dito mas segue a mensagem de erro ao inserir o valor 13/09/2010, tambem testado com 13-09-2010
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

java.lang.IllegalArgumentException
	java.sql.Date.valueOf(Unknown Source)
	controle.PesFisicaControle.doPost(PesFisicaControle.java:45)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.33 logs.

Mas com o valor 2010-12-12 por exemplo funcionou. . Até mesmo se eu colocar 2012/12/12 dá a mensagem de erro.

Quero que o usuário digite a data de nascimento igual esta no RG =/ padrão brasileiro.

Valeu a dica ai,... mas ainda nada =(

E

Ah, use DateFormat então. Não tenho nenhum exemplo aqui, mas há diversos por aí. Ou então, se estiver usando JSF, use mask. Eu recomendo você mostrar pro usuário no formato “DD/MM/AAAA” como você quer, mas salvar como “AAAA-MM-DD”.

V

Sim, vi diversos exemplos mas como sou novo na pratica de programaçao nao estou sabendo aplicar.

Ja li sobre dateformat, simpledateformat… mas não estou sabendo mesmo aplicar isso e onde fazer exatamente. =/

V

Alguemmm que saca sobre isso pra me dar um HELPP… por favorr…

N

Na hora de inserir os registros set o DateStyle do postgres.

Por exemplo:

SET DateStyle European;

Fazendo isso, ele grava as datas em formato dd/mm/yyyy.

R

Busque isso aqui no google:

DateFormat site:guj.com.br

V

Ok, darei uma lida e testarei. Espero que me ajude muito, pois não quero ficar muito preso nisso. Obrigado.

V

Nossa isso é muito compliado, será que não existe algo mais simples.
Na web vejo vários exemplos mas não consigo encaixar no meu programa.

Eu até identifico a situação, a minha html recebe o valor 11/03/2001 mas quando é passado para o controle só é aceito se for 2001-03-11.

Ai que está, como eu altero esta porcaria para conseguir fazer a inserção no BD?

Tem geral falando use o SimpleDateFormat, use o DateFormat. Como se eu lendo ah tá que isso, tão simples vou aplicar aqui e pronto, já estou confuso, nem sei qual o certo usar para sanar esse problema.
Sou novato mesmo, alguém poderia dar um exemplo funcional e onde posso aplicar esse codigo?

V
Em uma das minhas tentativas, colocarei em detalhes:
SimpleDateFormat dataF = new SimpleDateFormat("yyyy-MM-dd");
			//vou criar uma variavel para receber da html o valor da data.
			String nData = request.getParameter("dt_nascimento");
			//vou dizer que dataformatada recebe o valor do campo
			dataF.format(nData);
			
//reclamando que dt_nascimento (DATE) nao aplica aos argumentos (SILPLE_DATE_FORMAT)  ERRO ERRO
			pesf.setDt_nascimento(dataF);
			// Quero assim 27/04/1987 e só aceita se for assim 1987-04-27

Ainda nao consegui resolver essa coisa de data onde muitos dizem que eh simples. =/

S

Também sou iniciante e estou com um problema parecido com o seu Vinicios_1987.
Quando uso o Date Format ou o Simple date format ele transforma minha data em String e não em Date, por isso gera uma exceção pq o banco está esperando um Date enão um String.
Uma coisa tão simples que infelizmente também ainda não achei solução.
Se alguém puder, por favor já uma força, obrigado!

Criado 13 de setembro de 2012
Ultima resposta 1 de nov. de 2012
Respostas 11
Participantes 5