2017-05-31 155 views
2

我正在使用JPA和JEE將DB2表遷移到Oracle數據庫。因此,我遇到了「日期」和「時間」類型列的問題。更具體地說,在Oracle中沒有數據類型「Time」,所以我試圖從DB2中存儲Oracle的類型「Date」列中的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

請看這裏 - Oracle **有** TIME數據類型:http://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj21908.html - 關於另一個想法:你如何看待2006-02-02插入?爲什麼你使用DATE作爲目標字段而不是TIMESTAMP? – Jan

+0

@Jan,我不認爲這個鏈接是正確的。這是「java db」,而不是oracle數據庫。 – OldProgrammer

+0

對。錯誤的鏈接。再次說明:oracle DATE列das有一個時間部分:https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm#i1006006 - 請參閱我的更新答案。 – Jan

回答

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將 以下信息存儲在:世紀,年,月,日,小時,分鐘和 秒。

+1

嗨1月 那麼,在檢查你已經表明,我必須說你是絕對正確的。實際上,它是存儲日期和時間。因此,懷疑結果。此外,請注意,在SQLDEVELOPER中,您可以更改掩碼,以便類型「DATE」的列顯示爲日期時間: YYYY-MM-DD-HH24.MI.SS此鏈接說明如何:https:// stackoverflow。 com/questions/12628385/sql-developer-is-returning-only-the-date-not-the-time-how-do-i-fix- 最後,非常感謝你解決我的問題。 –

+0

:-)隨時接受/ upvote我的答案 – Jan