繁体   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