Data - Conversao MYSQL

[size=18]Galera, é o seguinte, criei uma tabela no MYSQL com o campo DATE.
Criei uma classe no java chamada Produto, essa classe contem uma variavel do tipo Date chamada “validade”.

A quetão é a seguinte, como que eu passo uma data do tipo “dd/MM/yyyy” para a variável “validade” e converto esse valor para que ele seja aceito no meu BD?
Já tentei usar o SimpleDateFormat, + foi sem sucesso.[/size]

código:[code]
package Produto;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import Conexao.ConnectionFactory;

public class ProdutoDAO {

private Connection connection;

public ProdutoDAO(){
	this.connection = new ConnectionFactory().getConnection();
}


public void adiciona(Produto produto){
	String sql = "insert into produtos (classe,precoTabela,validade,nome) values (?,?,?,?)";
	try {
		PreparedStatement stmt =  connection.prepareStatement(sql);
		
		
		stmt.setString(1, produto.getClasse());
		stmt.setDouble(2, produto.getPreco());
		//stmt.setDate(3, date);
		stmt.setString(4, produto.getNome());
		
		
		stmt.execute();
		stmt.close();
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}				
}


public List<Produto> getLista(){
	try{
	List<Produto> produtos = new ArrayList<Produto>();
	PreparedStatement stmt = this.connection.prepareStatement("select * from produtos");
	ResultSet rs = stmt.executeQuery();
		while(rs.next()){
			Produto produto = new Produto();
			produto.setId(rs.getLong(1));
			produto.setNome(rs.getString("classe"));
			produto.setPreco(rs.getDouble("precoTabela"));
			//produto.setValidade(rs.getDate("validade"));
			produto.setNome(rs.getString("nome"));
			
			produtos.add(produto);
			}			
		rs.close();
		stmt.close();
		return produtos;
	}catch(SQLException e){
		throw new RuntimeException(e);
	}	
}


public void altera(Produto produto){
	String sql="update produtos set classe=?, precoTabela=?, validade=?, nome=? where id=?";
	try{
		PreparedStatement stmt = connection.prepareStatement(sql);
		stmt.setString(1, produto.getClasse());
		stmt.setDouble(2, produto.getPreco());
		//stmt.setDate(3, produto.getValidade());
		stmt.setString(4, produto.getNome());
		stmt.setLong(5, produto.getId());
		
		stmt.execute();
		stmt.close();
	}catch(SQLException e){
		throw new RuntimeException(e);
	}
}

public void remove(Produto produto){
	try {
		PreparedStatement stmt = connection.prepareStatement("delete from produtos where id=?");
		stmt.setLong(1, produto.getId());
		stmt.execute();
		stmt.close();
	} catch (SQLException e) {
		throw new RuntimeException();
	}
	
}

}[/code]
[size=18]
Como podem ver, todos os campos que eu utilizo a variável “validade” estão comentados, pois eu não consegui converter o valor e insri-lo no BD.

Classe Protuto (java bean)[/size]

[code]package Produto;

import java.util.Calendar;
import java.util.Date;

public class Produto {
private Long id;
private double preco;
String nome, classe;
Date validade;

public double getPreco() {
	return preco;
}
public void setPreco(double preco) {
	this.preco = preco;
}
public Long getId() {
	return id;
}
public void setId(Long id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getClasse() {
	return classe;
}
public void setClasse(String classe) {
	this.classe = classe;
}
public Date getValidade() {
	return validade;
}
public void setValidade(Date validade) {
	this.validade = validade;
}

}
[/code]

  • uma vez, conto com a ajuda da galera do guj.
    Obrigado a todos!

O trecho abaixo não funciona para você?

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("08/11/2011");

Tenta assim.

Calendar calendario = Calendar.getInstance();
calendario.clear();
calendario.set(ano, mes, dia, hora, minuto, segundo);
SimpleDateFormat formato = SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dataFormatada = formato.format(calendario);

Quanta bobagem, hein?
Para inserir:

stmt.setDate(3, new java.sql.Date(produto.getValidade().getTime()));

E para recuperar, utilize o SimpleDateFormat, como o camarada acima respondeu.

Eu trabalho tratando como String!

Metodo utilizado:
public String dataPMySQL(String data){
String ret = " - - “;
try{data = data.replace(”/", “”);}catch(Exception e){}
try{data = data.replace("-", “”);}catch(Exception e){}
try{data = data.substring(4,8 )+"-"+data.substring(2,4)+
“-”+data.substring(0, 2);}catch(Exception e){}
ret = data;
return ret;
}

String data = “08/11/2011”;

String dataPBanco = dataPMySQL(data);

o retorno do ‘dataPBanco’ fica assim: “2011-11-08”

[quote=murilomenegasso]Eu trabalho tratando como String!

Metodo utilizado:
public String dataPMySQL(String data){
String ret = " - - “;
try{data = data.replace(”/", “”);}catch(Exception e){}
try{data = data.replace("-", “”);}catch(Exception e){}
try{data = data.substring(4,8 )+"-"+data.substring(2,4)+
“-”+data.substring(0, 2);}catch(Exception e){}
ret = data;
return ret;
}

String data = “08/11/2011”;

String dataPBanco = dataPMySQL(data);

o retorno do ‘dataPBanco’ fica assim: “2011-11-08”[/quote]

Tratar como string é um erro clássico de quem é iniciante.
O java tem suporte à datas nativamente, através da classe java.util.Date.
Ela pode ser convertida diretamente em uma java.sql.Date.

Se você pretende programar em um nível melhor, aprenda a trabalhar orientado a objetos.

Opa, funcionou.
Usei o SimpleDateFormat do jeito que o roger sugeriu e implementei igual ao drsmachado.
Código rodando legal.

  • uma vez, valeu a ajuda da galera do GUJ.