Datas

8 respostas
Naruto

Boa tarde, galera estou trazendo uma data em formato String dessa maneira dd/MM/yyyy via request.getParameter

porem preciso gravar essa data no banco em formato MM-dd-yyyy como eu faço isso??? lembrando que no banco o campo é do tipo Date e na aplicação tb é do tipo Date… apenas pego ela de um requesr como String

vlwwwwwww

8 Respostas

O
Para transforma a String em Data use o SimpleDateFormat:

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

Date data = sdf.parse(03/04/2009);

E para salvar no banco, use o PreparedStatement (caso você não esteja usando algum framework ORM):

... PreparedStatement stmt = connection.prepareStatement("...set data = ?..."); java.sql.Date dataSQL = new java.sql.Date(data.getTime()); stmt.setDate(1, dataSQL);
Ah, e não se preocupe que com o formato. Na verdade, internamente a classe Date não guarda formato algum quem a usa que deve saber o formato que quer, e nesse caso o PreparedStatement “sabe” o formato do seu banco.

Naruto

cara bom dia... obrigado pela dica porem to com um problema..

no meu bean a data desde é do tipo Date do sql certo ??

e ai eu recebo esse valor como String de um request e faço isso
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			try {
				Date desde = sdf.parse(request.getParameter("desde"));
				
			} catch (ParseException e1) {
				request.setAttribute("mensagem", "Data Inválida!");
				return "cadastro_cliente.jsp";
				// e1.printStackTrace();

			}

porem ai ele num deixa eu fazer isso
cliente.setDesde(desde);

pois o desde do SimpleDateFormat é Data normal e o no meu bean e data do sql

como eu faço pa resolver isso??

vlww

igor_jua
java.util.Date d = new java.util.Date();
        long dat =d.parse("12/05/2009");
        java.sql.Date date = new java.sql.Date(dat);
        System.out.println(dat);

o parse é dreprecared mas funciona…

Naruto

opa cara beleza??? funcionou certim :smiley:

vlwww meu amigo

O
Naruto:
cara bom dia... obrigado pela dica porem to com um problema..

no meu bean a data desde é do tipo Date do sql certo ??

e ai eu recebo esse valor como String de um request e faço isso
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			try {
				Date desde = sdf.parse(request.getParameter("desde"));
				
			} catch (ParseException e1) {
				request.setAttribute("mensagem", "Data Inválida!");
				return "cadastro_cliente.jsp";
				// e1.printStackTrace();

			}

porem ai ele num deixa eu fazer isso
cliente.setDesde(desde);

pois o desde do SimpleDateFormat é Data normal e o no meu bean e data do sql

como eu faço pa resolver isso??

vlww
Faça um parse para java.util.Date e depois use o construtor do java.sql.Date dataSQL:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
      try {
         java.util.Date data = sdf.parse(request.getParameter("desde"));
         java.sql.Date desde = new java.sql.Date(data.getTime());
         ...
Por que você não trabalha com o java.util.Date mesmo? Você só precisa do sql.Date na hora de persistir. Só aí você usaria a linha 04. A java.sql.Date é um wrapper meio tosco pra representar o tipo Date do banco, que não guarda o horário, e diferenciar dos tipos que guardam data e hora e apenas hora. Ele lança IllegalArgumentException nos métodos não suportados. Mais um bom exemplo de como não usar herança.
Naruto

Obrigado amigo vou tentar aqui e falo o resultado
vlwww

Naruto

olha me retorna esse erro usando o Date.util

SEVERE: Servlet.service() for servlet SiscomController threw exception java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date at br.com.siscom.model.dao.ClienteDAO.gravar(ClienteDAO.java:74) at br.com.siscom.model.command.CadastrarCliente.execute(CadastrarCliente.java:63) at br.com.siscom.controller.SiscomController.processarRequisicao(SiscomController.java:41) at br.com.siscom.controller.SiscomController.doPost(SiscomController.java:50) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)

O

Você ainda não entendeu, eu já falei duas vezes como passar de java.util.Date pra java.sql.Date e não é fazendo cast. Dá uma olhada.

Criado 8 de julho de 2009
Ultima resposta 9 de jul. de 2009
Respostas 8
Participantes 3