Java 从JdbcTemplate中的结果集获取日期时间
在数据库中,我的列的类型为TIMESTAMP,因此我的类的属性类型为Datetime,如下所示:Java 从JdbcTemplate中的结果集获取日期时间,java,datetime,jdbc,jodatime,jdbctemplate,Java,Datetime,Jdbc,Jodatime,Jdbctemplate,在数据库中,我的列的类型为TIMESTAMP,因此我的类的属性类型为Datetime,如下所示: public void setDiscoveryDate(final DateTime discoveryDtTm) { this.discoveryDtTm = discoveryDtTm; } variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm")); 现在,在JdbcTemplate中,我想获得它,因此
public void setDiscoveryDate(final DateTime discoveryDtTm) {
this.discoveryDtTm = discoveryDtTm;
}
variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm"));
现在,在JdbcTemplate中,我想获得它,因此一些代码如下:
public void setDiscoveryDate(final DateTime discoveryDtTm) {
this.discoveryDtTm = discoveryDtTm;
}
variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm"));
这不起作用,因为get for resultset列我找不到返回DateTime的内容,我只看到了getDate或getTime。请尝试:
variant.setDiscoveryDate(new DateTime(rs.getTimestamp("discovery_dt_tm").getTime()));
这是因为
DateTime
不是标准的Java类型。如果您指的是JodaTime类型,请尝试以下操作:
variant.setDiscoveryDate(
new DateTime(rs.getTimestamp("discovery_dt_tm").getTime())
);
如果rs.getTimestamp
返回null
,则该语句将中断,因此您可能希望将其拆分为较小的语句,并添加对null
的检查
请注意,这可以简化,因为DateTime
的构造函数采用java.util.Date
,而Timestamp
是以下的子类:
variant.setDiscoveryDate(
new DateTime(rs.getTimestamp("discovery_dt_tm"))
);
但这也是错误的,因为Timestamp
类的设计不好(请参阅以获取解释)
请继续使用第一个示例(使用
getTime()
)谢谢,因此我们仍然只使用.getTime()并将其传递给新的DateTime,那么到目前为止发生了什么?@BDotA:Timestamp.getTime()
名称不正确-它返回自1970年1月1日以来的毫秒数,因此包括日期和时间部分。rs.getTimestamp()将从数据库返回原始值,但在JVM的时区内。如果将UTC值存储在数据库中,新的DateTime(rs.getTimestamp())将返回不正确的值-按UTC偏移量进行偏移。这对我使用ResultSet并实现行映射器的Spring MVC应用程序非常有用。谢谢