Java.sql.Date x java.util.Date

Pessoal sei que o assunto data já foi bastante descutido aqui no GUJ, mas vamos lá:

Minha aplicação é multi banco para repositório, então não posso usar funções especificas de bancos, como por exemplo TO_DATE do ORACLE, etc …

Tenho no formulário uns campos que envia uma string do tipo 21/10/2003 12:00:00. Tenho que persistir esse dado no banco, em um campo DATE.

Tentei fazer assim:

private Date formataData(String pData){
		
		Date dataRetorno = null;
		
		Locale.setDefault(new Locale("pt", "BR"));
		
		//inicializa a variável dftFormatoDataHora com a hora corrente
		DateFormat dftFormatoDataHora = DateFormat.getDateTimeInstance();
						
		//passa a string para date
		try{
							
			dataRetorno = formatador.parse(pData);
		}
		catch(Exception e){System.out.println(e.getMessage());}
							
		return dataRetorno;
	
	}

O problema é que o setDate do preparedStatement é java.sql.Date, incompativel com java.util.Date.

Alguém tem uma saída fácil?

Olha, se voce usar o setObject() deve funcionar.

Rafael

PreparedStatement ps = … //seu prepared statement
x = //indice do ?
DATA = //tipo java.util.Date

ps.setDate(x, new java.sql.Date(DATA.getTime()));

Abraços

Só mais uma dúvida:

qdo o campo é de horas: 13:45:00

fazendo new java.sql.Date(formataHora(13:45:00).getTime()) ele grava uma data nada a ve, tipo 01/01/70

dentro do formataHora usei
SimpleDateFormat formatador = new SimpleDateFormat(“HH:mm:ss”);

usando PreparedStatent o driver do banco que vai cuidar de transformar as dados de acordo com SGBD. :wink:

thiagorani

Vc nao está colocando a data, por isso o banco coloca uma data default
Lembrando que o tipo DATE em banco normalmente encapsula um bocado de informacao, tipo millisegundos, dia, uns até o timestamp e timezone…

Use SimpleDateFormat(“dd/MM/yyyy hh:mm”) para colocar a data tb a fim de setar a data vc mesmo e nao o banco…

Falow