Converter String p/ Date no BD

Olá,
Eu tenho uma classe mapeada do Hibernate, que tem um atributo data do tipo String (private String data;).
No BD, a coluna da minha tabela é do tipo DATE.
Como faço p/ gravar essa String no BD?
Essa é uma clsse de teste que eu fiz:

public static void main(String[] args) {
	FilaSaidaVO fila = new FilaSaidaVO();
	
	SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
	System.out.println(f.format(new Date()));
	fila.setData(f.format(new Date()));
	fila.setIdLote("123456789012345");
	fila.setStatus(1);
	fila.setVersao("1.02");
	
	FilaSaidaDAO dao = new FilaSaidaDAO();
	dao.incluirFilaRecebimento(fila);
}

Esse é o meu FilaSaidaVO:

/***
 * @hibernate.class table="FILA_SAIDA"
 * @author viviane.grieco
 *
 */
public class FilaSaidaVO {
	private long identificador;
	private String data;
	private String idLote;
	private String versao;
	private int status;
	/***
	 * @hibernate.property column = "DATA" type = "java.lang.String" not-null = "false" unique = "false"
	 */
	public String getData() {
		return data;
	}
	/**
	 * @hibernate.id name="identificador" generator-class="native" type="long" 
	 * 				 column="IDENTIFICADOR" unsaved-value="null"
	 * @hibernate.generator-param name="sequence" value="SQ_FILA_SAIDA"
	 */
	public long getIdentificador() {
		return identificador;
	}
	/***
	 * @hibernate.property column = "COD_LOTE" type = "java.lang.String" not-null = "false" unique = "false"
	 */
	public String getIdLote() {
		return idLote;
	}
	/***
	 * @hibernate.property column = "STATUS" type = "int" not-null = "false" unique = "false"
	 */
	public int getStatus() {
		return status;
	}
	/***
	 * @hibernate.property column = "VERSAO" type = "java.lang.String" not-null = "false" unique = "false"
	 */
	public String getVersao() {
		return versao;
	}
	
...métodos sets....
	

e o Dao:

public void incluirFilaRecebimento(FilaSaidaVO pFilaVO){
		
		Session session = null;
		Transaction tx = null;
		
		try {
			pFilaVO.setStatus(FilaIf.STATUS_LIVRE);
			session=getSession();
			tx=session.beginTransaction();
			
			session.save(pFilaVO);
			tx.commit();
			session.close();
				} catch (Exception e) {
					e.printStackTrace();
			// TODO: handle exception
		}
	}

Quando tento executar a classe de teste do jeito que eu coloquei aqui no post, dá esse erro:

 java.sql.BatchUpdateException: ORA-01830: a imagem do formato da data termina antes de converter a string de entrada inteira

Melhor deixar o atributo da sua classe VO como Date, assim você não precisa se preocupar com formato de data

flw

Não posso, ele tem q ficar como String.

O Oracle não aceita fazer isto:

INSERT INTO <table> (<coluna tipo date>) VALUES ('01/01/2006 10:00:00')

Só aceita isto:

INSERT INTO <table> (<coluna tipo date>) VALUES ('01/01/2006')(sem hora:min: seg)

ou isto:

INSERT INTO <table> (<coluna tipo date>) VALUES TO_DATE('01/01/2006 10:00:00', 'DD/MM/YYYY HH:MI:SS')usando função TO_DATE.

Recomendo usar o TO_DATE pois evita problemas de incompatibilidade de formato de data, pois pode-se passar a mascara.

[quote=oyama]O Oracle não aceita fazer isto:

INSERT INTO <table> (<coluna tipo date>) VALUES ('01/01/2006 10:00:00')

Só aceita isto:

INSERT INTO <table> (<coluna tipo date>) VALUES ('01/01/2006')(sem hora:min: seg)

ou isto:

INSERT INTO <table> (<coluna tipo date>) VALUES TO_DATE('01/01/2006 10:00:00', 'DD/MM/YYYY HH:MI:SS')usando função TO_DATE.

Recomendo usar o TO_DATE pois evita problemas de incompatibilidade de formato de data, pois pode-se passar a mascara.
[/quote]

Você testou esse seu insert com esse formato de data? Se funcionou é por que o seu banco está configurado com esse formato. Então faz-se necessário verificar o formato do banco pra ter certeza. O banco aqui está com o formato dd-mon-yy.

Execute essa consulta no seu banco Oracle pra verificar os parâmetros:


select * from v$nls_parameters;

Desculpe se não fui claro: com o meu exemplo o que eu quis ilustrar que para coluna tipo Date o Oracle aceita passar uma data em formato String, mas não aceita passar uma data e tempo. Uma maneira de contornar isto seria usar a função TO_DATE. Eu fiz os testes levando em conta o formato da data setado no Oracle, pois testei tanto no SQLPlus como com o Squirrel (via JDBC). Se você coloca um formato invalido o erro é diferente (acho que era mes invalido).

Fiz os testes usando um Oracle9i.

PS: É bem estranho mesmo mapear um coluna do tipo DATE como uma String. Poderia explicar os motivos?