簡體   English   中英

Hibernate java.sql.Date字段僅返回Oracle的日期

[英]Hibernate java.sql.Date field return only date for Oracle

我正在使用oracle數據庫檢索日期和時間,但是當我使用java.sql.Date時,它僅返回日期。 我曾嘗試使用java.sql.Timestamp,但由於錯誤的列類型而給了例外。 我嘗試使用V8Compatible配置。 但這也不起作用。 我無法在數據庫端進行任何更改。 在數據庫中,該列的類型為DATE。

請給個建議

為此,您應該使用ojdbc14.jar和oracle.sql.DATE

資源

您可以嘗試插入精度為2的時間戳。檢查此Stack Overflow Question 由於Oracle Date數據類型等效於Java中的java.sql.Timestamp。 參考

或只是去java.util.Date,它應該工作。 格式化和插入的簡便方法。 這個例子

某些代碼會很好,但是您是否嘗試使用@Temporal(TemporalType.TIMESTAMP)注釋日期字段?

9.2之前的版本,Oracle JDBC驅動程序將DATE SQL類型映射到java.sql.Timestamp。 這在一定程度上是有道理的,因為Oracle DATE SQL類型像java.sql.Timestamp一樣包含日期和時間信息。 到java.sql.Date的更明顯的映射有些問題,因為java.sql.Date不包含時間信息。 在這種情況下,RDBMS不支持TIMESTAMP SQL類型,因此將DATE映射到Timestamp也沒有問題。

在9.2中,TIMESTAMP支持已添加到RDBMS。 DATE和TIMESTAMP之間的區別在於TIMESTAMP包括納秒,而DATE不包括。 因此,從9.2開始,DATE映射到Date,而TIMESTAMP映射到Timestamp。 不幸的是,如果您依賴於DATE值來包含時間信息,則會出現問題。

在9.2至10.2驅動程序中,有幾種方法可以解決此問題:

更改表以使用TIMESTAMP而不是DATE。 這可能極少發生,但在可能的情況下是最佳解決方案。 欲獲得更多信息
請參閱: http : //www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#08_01

確保一次使用以下代碼,因為第一個用於創建時間戳,然后使用get方法從oracle數據庫中檢索日期android時間。

......................

java.util.Date android = new java.util.Date();
      long t = android.getTime();
      java.sql.Date sqlDate = new java.sql.Date(t);
      java.sql.Time sqlTime = new java.sql.Time(t);
      java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(t);

......................

pstmt.getDate(2, sqlDate);
      pstmt.getTime(3, sqlTime);
      pstmt.getTimestamp(4, sqlTimestamp);
      pstmt.executeUpdate();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM