Data - Conversao MYSQL

6 respostas
E

[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:
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();
		}
		
	}
		
	
	
}
[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]

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;
	}
	
	

}

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

6 Respostas

R

O trecho abaixo não funciona para você?

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

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);
drsmachado

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.

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”

drsmachado

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”

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.

E

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.
Criado 8 de novembro de 2011
Ultima resposta 10 de nov. de 2011
Respostas 6
Participantes 5