在Oracle Date Column

时间:2017-05-31 14:33:49

标签: java oracle jpa java-ee

我正在使用JPA和JEE将DB2表迁移到Oracle数据库。因此,我在"日期"和"时间"类型列。更具体地说,在Oracle中没有数据类型" Time"所以我试图从DB2中存储一列中的2列(一个是Date类型,另一个是Time类型)的串联。类型"日期"的Oracle数据库。这样,我将向您展示如何在Oracle数据库中定义列以及我定义的映射:

, DATA_HORA_CREACIO DATE DEFAULT
TO_DATE('0001-01-01-00.00.00','YYYY-MM-DD-HH24.MI.SS')
NOT NULL

private Date dataHoraCreacio;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DATA_HORA_CREACIO", nullable = false)
public Date getDataHoraCreacio() {
    return this.dataHoraCreacio;
}

public void setDataHoraCreacio(Date dataHoraCreacio) {
    this.dataHoraCreacio = dataHoraCreacio;
}

SimpleDateFormat sdfDateHour = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss");
String data = sdfDate.format(comandaAvariaDb2.getId().getDataCreacio());
String hora = sdfHour.format(comandaAvariaDb2.getId().getHoraCreacio());
comandaAvariaOraId.setDataHoraCreacio(sdfDateHour.parse(data + "-" +    hora));

即便如此,虽然正确通知了涵盖信息的工作变量,但是存储了引用时间的部分而不是插入数据库中:

Variable working data: Thu Feb 02 18:42:53 CET 2006
DataBase inserted Value: 2006-02-02

我已经尝试了几个小时而没有让它发挥作用。即便如此,如果我设法使用类型" Timestamp"但我认为不是最佳解决方案,因为毫秒占用了不必要的空间。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果对DATA_HORA_CREACIO使用Oracle DATE值,则应该能够直接从DB2插入时间戳。只是选择一个没有任何输出提示的DATE列将只显示显示中的日期部分:

CREATE TABLE STACK2 
      (DATA_HORA_CREACIO DATE
    DEFAULT TO_DATE('0001-01-01-00.00.00',
        'YYYY-MM-DD-HH24.MI.SS') NOT NULL);

INSERT INTO STACK2 VALUES 
     (TO_DATE('2017-05-30-16.47.32','YYYY-MM-DD-HH24.MI.SS'));

SELECT DATA_HORA_CREACIO, 
       TO_CHAR(DATA_HORA_CREACIO, 'YYYY-MM-DD'), 
       TO_CHAR(DATA_HORA_CREACIO, 'HH24:MI:SS') FROM STACK2;

结果是: enter image description here

请参阅Oracle DATE definition的摘录:

  

DATE数据类型

     

DATE数据类型存储日期和时间信息。   虽然日期和时间信息可以用两者表示   字符和数字数据类型,DATE数据类型有特殊   相关属性。对于每个DATE值,Oracle存储   以下信息:世纪,年,月,日,小时,分钟和   第二