我正在开发一个项目,该项目需要获得新客户创建其帐户的时间,然后将该时间保留在数据库中供以后使用。但是,我真的不了解postgresql的时间戳数据类型?它是一个String相对于java的Calendar或Date对象(你可以给我一个插入和检索的例子)吗?
答案 0 :(得分:1)
正如@MadProgrammer所提到的,{{1>}和Timestamp
在 Java 和 Postgres 中都有所不同。虽然可以使用Date
,但我通常将 POJO 中的 Postgres java.sql.Timestamp
代表为timestamp
。
这样做的原因是它消除了很多与时间戳(时区,不同格式等)相关的潜在麻烦,因为可以简单地使用 Postgres String
的文本表示,它仍然可以使用 Postgres 来回传递。此规则的例外情况是,如果您真的需要它真正成为 Java 端的timestamp
,因为,例如,您是 ETL 在 Postgres 之外的其他平台,所以如果从 Postgres获取数据,就不能依赖于 Postgres 文本表示法em>并将其放回 Postgres 。
假设您的时间戳为Timestamp
,表格如下:
2014-08-08 02:11:21.215428
您可以在 POJO 中表示:
create table foo
(
id serial,
created timestamp without time zone default now(),
notes text
);
要记住的关键是,如果您在另一个查询中使用该值,则需要将转换回class FooBean
{
int id;
String created;
String notes;
};
(即timestamp
),否则 Postgres 将抛出强制转换异常。
根据OP的评论进行编辑:
此方法也有助于掩盖与时区相关的头痛。时区也可以用文本表示,只需通过字符串上的notes::timestamp
表达式即可。例如,无时区字符串-XX
可以通过字符串2014-08-08 02:11:21.215428
表示时区。
正如@MadProgrammer在下面的评论中提到的, Postgres 也有一个带时区的时间戳类型;我碰巧选择了没有上述例子的那些。