我正在使用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"但我认为不是最佳解决方案,因为毫秒占用了不必要的空间。
有什么想法吗?
提前致谢。
答案 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;
请参阅Oracle DATE definition的摘录:
DATE数据类型
DATE数据类型存储日期和时间信息。 虽然日期和时间信息可以用两者表示 字符和数字数据类型,DATE数据类型有特殊 相关属性。对于每个DATE值,Oracle存储 以下信息:世纪,年,月,日,小时,分钟和 第二