Eterna LUTA : Gravar data em BD MySQL ! Tô apanhando

16 respostas
V

Colegas,

No meu Bean, todos os campos tipo data são do tipo Java.Util.Date

Recebo, através do request a data no formato : dd/MM/yyyy

Atraves do SimpleDateFormat tentei :

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				socio.setDtSindSoc((Date) sdf.parse(request.getParameter("dtSindSoc")));

Ele reclama informando que a data não pode ser Parseada

Ae criei um método que recebe o request e me retorna uma String no formato yyyy-MM-dd:

socio.setDtSindSoc((Date) sdf.parse(util.inverteData(request.getParameter("dtSindSoc"))));

Continua dando erro (mas não o que a data não pode ser parseada).

Algum colega que já passou por isso pode me ajudar ?

Um forte abraço

Vimieiro

16 Respostas

leandro.anjos

Envia o erro que fica mais fácil pra ti ajudar

V

A sim

java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

Obrigado

J

tira o (Date)… o import deve estar java.sql.Date;
ou seja… está tentando transformar o valor que é um java.util.Date em java.sql.Date

já pra converter a String diretamente pra Date… bastava inicializar o parser como

SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);

ou seja, no mesmo formato da String q vc está lendo.

L

o objeto java.sql.Date é diferente de java.util.Date

Luiz-SP

eu guardo data no banco no formato YYYYMMDD como número mesmo, pode falar que não POO, mas a minha aplicação é POO, o banco não!!

V

Amigos, jaja vou testar.

Muito obrigado

Vimieiro

Pedrosa

Trabalhe com objetos Timestamp e evite dor de cabeça com campos data.

pyro

Vou na mesma opinião já dada aqui, vai de timestamp e seja feliz.
Aliás utilizando timestamp fica também mais fácil fazer operações com data (daí vc só transforma em formato de data na exibição).

fabiojwalter

Crie dentro de sua aplicação ao invés de um SimpleDateFormat dois SimpleDateFormat mais ou menos assim:

//Depois de ler do banco para jogar na tela
    private SimpleDateFormat formatoParaTela = new SimpleDateFormat("dd/MM/yyyy");

    //Depois de ler da tela para inserir no banco
    private SimpleDateFormat formatoParaBanco = new SimpleDateFormat("yyyy-MM-dd");

Não é preciso mudar a estrutura de sua base de dados por falta de lógica. Imagine se voce não tivesse acesso ao banco de dados como em uma integração de sistemas.

V

Veja bem :

No meu form eu tenho a data : 27/05/1968

No meu Servlet eu tenho :

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
socio.setDtSindSoc(sdf.parse(util.inverteData(request.getParameter("dtSindSoc"))));

Este inverteData pega a data 27/05/1968 e inverte a data para mim e me entrega 1968-05-27

Lá no NetBean eu tenho :

public Date getDtSindSoc() {
		return dtSindSoc;
	}
	public void setDtSindSoc(Date dtSindSoc) {
		this.dtSindSoc = dtSindSoc;
	}

Aonde Date é JAVA.UTIL.DATE

Porém lá no DAO eu faço :

stmt.setDate(6,(Date)socio.getDtSindSoc());

Aonde Date é JAVA.SQL.DATE

Mas está me dando erro de Parse mostrando que não posso converter !

Os colegas poderiam me informar aonde estou errando ? ou o quê está faltando ?

Um forte abraço a todos

vimieiro

rafagil
vimieiro:
Veja bem :

No meu form eu tenho a data : 27/05/1968

No meu Servlet eu tenho :

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
socio.setDtSindSoc(sdf.parse(util.inverteData(request.getParameter("dtSindSoc"))));

Este inverteData pega a data 27/05/1968 e inverte a data para mim e me entrega 1968-05-27

Lá no NetBean eu tenho :

public Date getDtSindSoc() {
		return dtSindSoc;
	}
	public void setDtSindSoc(Date dtSindSoc) {
		this.dtSindSoc = dtSindSoc;
	}

Aonde Date é JAVA.UTIL.DATE

Porém lá no DAO eu faço :

stmt.setDate(6,(Date)socio.getDtSindSoc());

Aonde Date é JAVA.SQL.DATE

Mas está me dando erro de Parse mostrando que não posso converter !

Os colegas poderiam me informar aonde estou errando ? ou o quê está faltando ?

Um forte abraço a todos

vimieiro

Olá,

primeiro, só uma dica, voce não precisa usar o "inverteData" se vc construir o sdf passando "dd/MM/yyyy" como parametro ;)

Para converter de Date para java.sql.date:

java.sql.Date d = new java.sql.Date(new java.util.Date().getTime());

Testa aí e vê se funciona.

V

Legal vou tentar mas …

Eu retirei o inverteDatas e deu o seguinte erro :

INFO: Server startup in 1313 ms java.text.ParseException: Unparseable date: "27/07/1981" at java.text.DateFormat.parse(Unknown Source)

V

Colega, aqui, sou novo em Java e fiquei perdido :

Não sei como “ligar” sua dica :

java.sql.Date d = new java.sql.Date(new java.util.Date().getTime());

a :

stmt.setDate(6,(Date)socio.getDtSindSoc());

:oops:
vimieiro

rafagil

Vamo lá:

retira o inverteData, maaaaaas, instancia o seu SimpleDateFormat assim:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

Dessa forma a data será parseada sem problemas.

para “ligar” é simples:

java.sql.Date data = new java.sql.Date(socio.getDtSindSoc().getTime());

stmt.setDate(6, data);

Entendeu?

V

Entendi, olha retirei e parece que passou.

Desculpe do “ligar” kkkk.

Agora me informe uma dúvida : vamos supor que a data venha em branco do Form (que será normal), ela não é obrigatória.

Como gravo no banco ? Null ? 00/00/0000

muito obrigado mesmo viu

Vimieiro

rafagil

vc é quem sabe. Por padrão no mysql se estiver malformada ou vazia, ele grava 00/00/0000.

Mas aí vai de vc, vc pode colocar null tbm.

Tanto faz.

Criado 21 de maio de 2008
Ultima resposta 27 de mai. de 2008
Respostas 16
Participantes 9