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

时间:2014-10-27 09:35:45

标签: java oracle hibernate date timestamp

我正在使用oracle数据库来检索日期和时间,但是当我使用java.sql.Date时它只返回日期。我已尝试使用java.sql.Timestamp,但它将异常作为错误的列类型。我试过V8Compatible配置。但它也没有用。我无法改变数据库方面的任何内容。在DB中,该列的类型为DATE。

请提出建议

4 个答案:

答案 0 :(得分:0)

为此,您应该使用ojdbc14.jar和oracle.sql.DATE

Source

您可以尝试插入精度为2的时间戳。检查此Stack Overflow Question。 由于Oracle Date数据类型等同于Java中的java.sql.Timestamp。 Reference

或者只是去java.util.Date,它应该工作。 格式化和插入的简便方法。像this example

这样的东西

答案 1 :(得分:0)

有些代码会很好,但您是否尝试使用@Temporal(TemporalType.TIMESTAMP)注释日期字段?

答案 2 :(得分:0)

在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

答案 3 :(得分:-1)

确保使用下面的代码一次,因为第一个用于创建时间戳,然后使用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();