[RESOLVIDO]Erro ao Gravar data BD OracleXE

Olá galera…
Estou com um formulário pequeno, tentando gravar uma data no banco de dados…
tentei de uma forma aqui e deu o seguinte erro…

Target URL -- http://192.168.1.40:8988/cadastro/view/CadastrarPoltrona.jsp
13/01/12 01:59:05 Oracle Containers for J2EE 10g (10.1.3.4.0)  initialized
12/01/2013 01:59:09 oracle.wireless.its.ra.TelnetResourceAdapter run
INFO: Versão do Industrial Telnet Server: Version 10.1.3.0.0 iniciada com sucesso.
13/01/12 01:59:30 java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

Alguém poderia me ajudar com esse errooo!

Esse é minha servlet…

[code] public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
try
{
PoltronaVo poltronaVo = new PoltronaVo();
String numeroPoltronaString = request.getParameter(“campo_numero_poltrona”);
String dataReserva = request.getParameter(“campo_data”);
String nomePassageiro = request.getParameter(“campo_nome”);

	   int numeroPoltrona = Integer.parseInt(numeroPoltronaString);
	   SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
	   Date data = formatador.parse(dataReserva);
	   
	   poltronaVo.setNumeroPoltrona(numeroPoltrona);
	   poltronaVo.setDataReserva(data);
	   poltronaVo.setNomePassageiro(nomePassageiro);
	   
	   PoltronaBe be = new PoltronaBe();
	   be.cadastrarPoltrona(poltronaVo);
	   
	   request.setAttribute("poltronaVo", poltronaVo);
	   request.setAttribute("msgSucesso","Poltrona reservada com sucesso.");
	   
	   RequestDispatcher rd = request.getRequestDispatcher("/view/CadastrarPoltrona.jsp");
	   rd.forward(request, response);
	}
   catch(Throwable e)
   {
      e.printStackTrace();
   }[/code]

Está dando problema provavelmente no seu DAO, se possvível coloque o DAO pra eu dar uma olhada!

Opa acho q consegui resolver…não sei se ta da melhor forma…rs

segue meu DAO

[code] public void cadastrarPoltrona(PoltronaVo poltronaVo) throws SQLException
{
PreparedStatement ps = null;
String sql = “INSERT INTO TB_POLTRONA(CODIGO, NUMERO_POLTRONA, DATA_RESERVA, NOME_PESSOA) VALUES (?,?,?,?)”;
ps = conexao.prepareStatement(sql);

	ps.setLong(1, gerarSequence("SEQUENCE_POLTRONA"));
	ps.setInt(2, poltronaVo.getNumeroPoltrona());
	ps.setDate(3, new Date(poltronaVo.getDataReserva().getTime()));
	ps.setString(4, poltronaVo.getNomePassageiro());
	ps.executeUpdate();
}[/code]

e alterei a servlet

[code] public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
try
{
PoltronaVo poltronaVo = new PoltronaVo();
String numeroPoltronaString = request.getParameter(“campo_numero_poltrona”);
String dataReserva = request.getParameter(“campo_data”);
String nomePassageiro = request.getParameter(“campo_nome”);

	   int numeroPoltrona = Integer.parseInt(numeroPoltronaString);
		SimpleDateFormat dt = new SimpleDateFormat("dd/MM/yyyy");
	   
	   poltronaVo.setNumeroPoltrona(numeroPoltrona);
	   poltronaVo.setDataReserva(new Date(dt.parse(dataReserva).getTime()));
	   poltronaVo.setNomePassageiro(nomePassageiro);
	   
	   PoltronaBe be = new PoltronaBe();
	   be.cadastrarPoltrona(poltronaVo);
	   
	   request.setAttribute("poltronaVo", poltronaVo);
	   request.setAttribute("msgSucesso","Poltrona reservada com sucesso.");
	   
	   RequestDispatcher rd = request.getRequestDispatcher("/view/CadastrarPoltrona.jsp");
	   rd.forward(request, response);
	}
   catch(Throwable e)
   {
      e.printStackTrace();
   }
}[/code]

dei um System…e imprimiu issoo…

13/01/12 17:05:22 Sat Dec 21 00:00:00 BRST 2013

Essa alteração que você fez deu certo? Qual é o stack trace qdo você roda esse código?

chivalski duas coisas que pra mim está meio indigesto… a sua Querie para persitência no Oracle e a conversão da data em texto (String). Segue um forma de fazer de maneira que fique mais claro o seu código.

Se a sua Coluna de data de reserva no Oracle for um tipo DATE mude a sua querie como no código abaixo:

String sql = "INSERT INTO TB_POLTRONA(CODIGO, NUMERO_POLTRONA, DATA_RESERVA, NOME_PESSOA) VALUES (?,?,TO_DATE(?, 'DD/MM/YYYY'), ?)";

e a Conversão de Data na sua Servlet faça desta maneira:

PrintWriter out = resp.getWriter();

//Demais parametros vindos do form pela url
//...
String dataTexto = req.getParameter("dataReserva");

		Calendar data = null;

		try {
			Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataTexto);
			data = Calendar.getInstance();
			data.setTime(date);

		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			out.println("Erro ao converter data!");
		}

mais um detalhe que não deve ser esquecido, embora você esteja querendo persistir uma data no Oracle, o import do pacote correto é:

import java.util.Date;

e não:

import java.sql.Date;

Lembrando ainda que o Tipo do seu atributo da Classe deve ser o Calendar, como abaixo:

private Calendar dataReserva;

Abraço e espero ter ajudado de alguma forma!

[quote=ppro11]chivalski duas coisas que pra mim está meio indigesto… a sua Querie para persitência no Oracle e a conversão da data em texto (String). Segue um forma de fazer de maneira que fique mais claro o seu código.

Se a sua Coluna de data de reserva no Oracle for um tipo DATE mude a sua querie como no código abaixo:

String sql = "INSERT INTO TB_POLTRONA(CODIGO, NUMERO_POLTRONA, DATA_RESERVA, NOME_PESSOA) VALUES (?,?,TO_DATE(?, 'DD/MM/YYYY'), ?)";

e a Conversão de Data na sua Servlet faça desta maneira:

PrintWriter out = resp.getWriter();

//Demais parametros vindos do form pela url
//...
String dataTexto = req.getParameter("dataReserva");

		Calendar data = null;

		try {
			Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataTexto);
			data = Calendar.getInstance();
			data.setTime(date);

		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			out.println("Erro ao converter data!");
		}

mais um detalhe que não deve ser esquecido, embora você esteja querendo persistir uma data no Oracle, o import do pacote correto é:

import java.util.Date;

e não:

import java.sql.Date;

Lembrando ainda que o Tipo do seu atributo da Classe deve ser o Calendar, como abaixo:

private Calendar dataReserva;

Abraço e espero ter ajudado de alguma forma![/quote]

ppro11 ajudou sim…ajuda de vocês do fórum é sempre bem vinda…!!!
vou testar suas dicas ainda hoje e posto os resultados…vlwzãooo!!!

ppro11 segui sua dica, e fiz em outro exemplo, mais ta dando erro no DAO agora, quando eu chamo o ps.setDate…segue o trecho do código…

ps.setDate(2, convidadoVo.getDataFesta());

da o seguinte erro no console

Error(26,6): method setDate(int, java.util.Calendar) not found in interface java.sql.PreparedStatement

vou postar as classe e as alterações que você me passou…

DAO

[code] public void cadastrarConvidados(ConvidadoVo convidadoVo) throws SQLException
{
PreparedStatement ps = null;
String sql = “INSERT INTO TB_CONVIDADO(CODIGO, DATA_FESTA, NOME, QUANTIDADE_CONVITE) VALUES (?,TO_DATE(?, ‘DD/MM/YYYY’) ,?,?)”;
ps = conexao.prepareStatement(sql);

	ps.setLong(1, gerarSequence("SEQUENCE_CONVIDADO"));
	ps.setDate(2, convidadoVo.getDataFesta());
	ps.setString(3, convidadoVo.getNome());
	ps.setInt(4, convidadoVo.getQuantidadeConvite());
	ps.executeUpdate();
	
	
}[/code]

VO

	private Calendar dataFesta;
	private String nome;
	private int quantidadeConvite;

        // getts e setts

SERVLET

[code] public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{

	try
	{
	   ConvidadoVo convidado = new ConvidadoVo();
	   PrintWriter out = response.getWriter();
	   String dataFestaString = request.getParameter("campo_data");
	   String nome = request.getParameter("campo_nome");
	   String quantidadeConviteString = request.getParameter("campo_quantidade_convite");
	   
	   Calendar data = null;
			try
			{
				Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataFestaString);
				data = Calendar.getInstance();
				data.setTime(date);
			}
			catch (ParseException e)
			{
				 e.printStackTrace();  
				 out.println("Erro ao converter data!");
			}
	   int quantidadeConvite = Integer.parseInt(quantidadeConviteString);
	   
	   convidado.setDataFesta(data);
	   convidado.setNome(nome);
	   convidado.setQuantidadeConvite(quantidadeConvite);
		
		ConvidadoBe be =new ConvidadoBe();
		be.cadastrarConvidado(convidado);
	   
	   request.setAttribute("convidadoVo", convidado);
	   request.setAttribute("msgSucesso","Convidado cadastrado com sucesso.");
	   
	   RequestDispatcher rd = request.getRequestDispatcher("/view/CadastrarConvidados.jsp");
	   rd.forward(request, response);
	}
   catch(Throwable e)
   {
      e.printStackTrace();
   }		
}[/code]

Ah legal chivalski, então esse trecho de código não teria que estar assim?;

stmt.setDate(2, new Date(convidadoVo.getDataFesta().getTimeInMillis()));

acho que o erro que tá dando é isso
Abraço!

[quote=ppro11]Ah legal chivalski, então esse trecho de código não teria que estar assim?;

stmt.setDate(2, new Date(convidadoVo.getDataFesta().getTimeInMillis()));

acho que o erro que tá dando é isso
Abraço![/quote]
:smiley: ppro11 vlw pela ajuda…consegui dessa forma tbm o código fico assim…

ps.setDate(2, (Date) new Date(convidadoVo.getDataFesta().getTimeInMillis()));

Cadastrei 21/03/2013 e pronto…

13-03-21 00:00:00.0

Vlw brigadão pela ajuda…!!!

valeu parceiro! tamo junto ae Abraço!

:smiley: :smiley: :smiley: