[Resolvido] Dúvida tratamento variável Date em JSP e Servlet

7 respostas
C

Olá pessoal. Comecei a pouco tempo aprender Java Web, tenho um formulário de cadastro onde o usuário irá informar duas datas, estou com um pouco de dificuldades em trabalhar com variáveis do tipo Date em JSP e Servlet.

Minha classe venda está assim:

package br.bmweb.pojo;

import java.util.Date;

public class Venda {
	private int cod_cliente, cod_orcamento, cod_funcionario;
	private Date data_venda, data_fechamento;
	private String status_venda, tipo_venda, tipo_pagamento;
	private double valor_total, valor_unitario, valor_desconto;
	
	public int getCod_cliente() {
		return cod_cliente;
	}
	public void setCod_cliente(int codCliente) {
		cod_cliente = codCliente;
	}
	public int getCod_orcamento() {
		return cod_orcamento;
	}
	public void setCod_orcamento(int codOrcamento) {
		cod_orcamento = codOrcamento;
	}
	public int getCod_funcionario() {
		return cod_funcionario;
	}
	public void setCod_funcionario(int codFuncionario) {
		cod_funcionario = codFuncionario;
	}
	public Date getData_venda() {
		return data_venda;
	}
	public void setData_venda(Date dataVenda) {
		data_venda = dataVenda;
	}
	public Date getData_fechamento() {
		return data_fechamento;
	}
	public void setData_fechamento(Date dataFechamento) {
		data_fechamento = dataFechamento;
	}
	public String getStatus_venda() {
		return status_venda;
	}
	public void setStatus_venda(String statusVenda) {
		status_venda = statusVenda;
	}
	public String getTipo_venda() {
		return tipo_venda;
	}
	public void setTipo_venda(String tipoVenda) {
		tipo_venda = tipoVenda;
	}
	public String getTipo_pagamento() {
		return tipo_pagamento;
	}
	public void setTipo_pagamento(String tipoPagamento) {
		tipo_pagamento = tipoPagamento;
	}
	public double getValor_total() {
		return valor_total;
	}
	public void setValor_total(double valorTotal) {
		valor_total = valorTotal;
	}
	public double getValor_unitario() {
		return valor_unitario;
	}
	public void setValor_unitario(double valorUnitario) {
		valor_unitario = valorUnitario;
	}
	public double getValor_desconto() {
		return valor_desconto;
	}
	public void setValor_desconto(double valorDesconto) {
		valor_desconto = valorDesconto;
	}
}

Até o momento meu servlet está assim:

package br.bmweb.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.bmweb.pojo.*;
import br.bmweb.util.*;
import br.bmweb.dao.*;

/**
 * Servlet implementation class Venda
 */
public class ServletVenda extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private final Connection conn;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		PrintWriter writer = response.getWriter();
		try {
			Venda venda = new Venda();
			Data data = new Data();
			HttpSession session = request.getSession(true);
			venda.setData_fechamento(new Data().formata(request.getParameter("data_fechamento")));
			venda.setData_venda(new Data().formata(request.getParameter("data_venda")));
			venda.setStatus_venda(request.getParameter("status_venda"));
			venda.setTipo_pagamento(request.getParameter("tipo_pagamento"));
			venda.setTipo_venda(request.getParameter("tipo_venda"));
			venda.setValor_desconto(Double.parseDouble(request.getParameter("valor_desconto")));
			venda.setValor_total(Double.parseDouble(request.getParameter("valor_total")));
			venda.setValor_unitario(Double.parseDouble(request.getParameter("valor_unitario")));
			
		}
    public ServletVenda() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

Reparem que nas linhas 34 e 35 do meu servlet faço chamada a um método de uma classe que formata uma data passada no formato DD/MM/AAAA e transforma em AAAA-MM-DD (já para gravar no MySQL).

Minha classe de formatação está assim:
package br.bmweb.util;

import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Data {	
	public Date formata(String data)throws Exception{
		String dataString = data;
		DateFormat df =  new SimpleDateFormat("dd/MM/yyyy");
		
		java.sql.Date dataFormatada = new java.sql.Date(df.parse(dataString).getTime());
		return dataFormatada;
		
		}
}

Estou com dificuldade em criar meu DAO que até o momento está assim:

package br.bmweb.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import br.bmweb.util.*;
import br.bmweb.pojo.*;

public class VendaDao {
	Connection con= new Conexao().conecta();
	
	public boolean grava(){
	String sql = "INSERT INTO TB_VENDA (ve_cod_funcionario, ve_cod_cliente, ve_cod_orcamento, ve_data_venda, " +
	                                   "ve_data_fechamento, ve_status_venda, ve_valor_unit, ve_valor_total, ve_desconto, " +
	                                   "ve_tipo_venda, ve_tipo_pagamento)" + 
	                           "VALUES (?,?,?,?,?,?,?,?,?,?,?)";
	try {
		PreparedStatement stmt = con.prepareStatement(sql);
		Venda venda = new Venda();
		stmt.setInt(1,venda.getCod_funcionario());
		stmt.setInt(2, venda.getCod_cliente());
		stmt.setInt(3, venda.getCod_orcamento());
		stmt.setDate(4, new Data().formata(venda.getData_venda()));
		stmt.setDate(5, new Data().formata(venda.getData_fechamento()));
        } catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	}
	
}

Acontece que quando escrevo as linhas 24 e25 do meu DAO no Eclipse da forma que está acima o Eclipse mostra o erro: "The method formata(String) in the type Data is not applicable for the arguments (Date)". Pelo que entendi até agora é que se eu tenho um campo para data no formulário JSP e capturar o valor dele, este valor virá no formato String, então eu tenho que formatar pro tipo Date no formato AAAA-DD-MM pra salvar no MySQL estou certo? Não estou encontrando uma solução para contornar isto. Alguém tem alguma idéia?

7 Respostas

A

Olá,

Cara não entendi muito bem que você quis diser, mas o problema está ocorrendo pelo seguinte, no seu Model data_venda e data_fechamento é do tipo Date, o seu método formata está esperando uma String como parâmetro. Só criar outro método arrumando isso.

abs

C

Arrumar que vc diz é criar um método que já espera como parâmetro uma variável do tipo Date? Não tenho como testar aqui que estou no trabalho mas e se no meu DAO eu fizesse algo como:

private Date datavenda, datafechamento; datavenda = formata(venda.getData_venda()); datafechamento = formata(venda.getData_fechamento()); stmt.setDate(4, datavenda); stmt.setDate(5, datafechamento);

Será que daria certo? Alguém tem outra idéia?

A

cristianogro:
Arrumar que vc diz é criar um método que já espera como parâmetro uma variável do tipo Date? Não tenho como testar aqui que estou no trabalho mas e se no meu DAO eu fizesse algo como:

private Date datavenda, datafechamento; datavenda = formata(venda.getData_venda()); datafechamento = formata(venda.getData_fechamento()); stmt.setDate(4, datavenda); stmt.setDate(5, datafechamento);

Será que daria certo? Alguém tem outra idéia?

Cara esse código ai não da na mesma? rss formata continua esperando String e você ta passando Date.

C

Mas não daria certo? Pois meu método formata recebe um string e converte para Date. O que fiz no código acima foi declarar um Date que recebe o resultado já formatado e convertido para Date. Existe outra forma? Qual a sua sugestão?

A

Entendi, problema que daria mesmo erro que antes, pois o método formata continuaria a receber uma String como parâmetro e não um Date como você está passando.

Acredito que criando um outro metodo formata esperando um Date ao inves de String, já resolve.

C

Acho que encontrei a solução, na minha classe Venda tenho isso aqui:

public Date getData_venda() { return data_venda; } public void setData_venda(Date dataVenda) { data_venda = dataVenda; } public Date getData_fechamento() { return data_fechamento; } public void setData_fechamento(Date dataFechamento) { data_fechamento = dataFechamento; }

No meu DAO eu tentava fazer assim:

stmt.setDate(4, new Data().formata(venda.getData_venda())); stmt.setDate(5, new Data().formata(venda.getData_fechamento()));

Se observar bem os gets da classe Venda dessas datas vai ver que já estão no formato Date, ou seja, não preciso mais formatar nada, pois os campos já foram formatados durante a execução do meu ServLet. Agora os campos data no meu DAO ficaram assim:

stmt.setDate(4, (Date) venda.getData_venda()); stmt.setDate(5, (Date) venda.getData_fechamento());

A

Era isso que tinha falado, no seu model o tipo da variável já era Date … por isso dava Exception. Só não percebi que durante você já tinha usado o metodo formata e não precisava no final :oops:

Criado 16 de março de 2010
Ultima resposta 16 de mar. de 2010
Respostas 7
Participantes 2