【问题标题】:How to store timestamp in h2 database如何在h2数据库中存储时间戳
【发布时间】:2017-02-02 18:31:09
【问题描述】:

我有一个简单的 REST Api,它公开了几个实体,其中一些具有我想以 UNIX 时间戳格式存储在 H2 数据库中的日期字段。但是,这会导致以下异常:

Caused by: org.h2.jdbc.JdbcSQLException: Cannot parse "TIMESTAMP" constant "335923000"; SQL statement:
INSERT INTO people (person_id, first_name, last_name, email, gender, location, date_birth) VALUES 
    ('1', 'Peter', 'Smith', 'peter@hotmail.com', 'MALE', 'London', 335923000),
    ...

以前,它使用以下格式的时间戳:'1980-04-08'

这是 SQL 表定义:

CREATE TABLE people (
    person_id BIGINT PRIMARY KEY auto_increment,
    first_name VARCHAR(32),
    last_name VARCHAR(32),
    email VARCHAR(128) UNIQUE,
    gender VARCHAR(8),
    location VARCHAR(32),
    date_birth TIMESTAMP,
);

还有我的映射对象(省略了不必要的细节):

@Entity
@Table(name = "people")
@Getter
@Setter
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "person_id")
    private long id;

    ...

    @Column(name = "date_birth")
    @JsonFormat(pattern = "YYYY-MM-dd")
    private Date dateOfBirth;

    ...
}

我假设 @JsonFormat 注释与数据库时间戳格式没有任何关系,但我不确定如何告诉 hibernate 我的时间戳是 UNIX 格式。

我查看了convert unix timestamp to H2 timestamp 和 H2 文档,应该支持这种标准格式。有人能指出我做错了什么吗?

【问题讨论】:

  • 你使用的是 java.util.Date 还是 java.sql.Date?
  • @mhasan 我正在使用 java.util.Date
  • 您是否尝试过使用DATE 而不是TIMESTAMP,因为您的专栏名称表明它只是一个日期,而不是时间戳?

标签: java hibernate h2


【解决方案1】:

嗯,答案已经以另一种方式完成here

您会找到一种方法来表示没有时区的毫秒日期时间(即 SQL 中的“时间戳”)

【讨论】:

  • 该答案不包括如何在 H2 数据库中以 UNIX 时间戳格式存储时间戳
  • 你不能......你正在尝试使用 Timestamp sql 类型作为数据类型的表示,就像“long”一样......为什么不直接使用 LONG 类型或 NUMERIC(18 ) 在这种情况下 ? SQL Timestamp 不是您认为的那样:即使在磁盘上的序列化结束时,数据库肯定会使用类似 unix 表示的东西,H2 SQL API 的前端在文本表示中表示 TIMESTAMP = Date+Time+Milliseconds .所以如果你真的想用 Timestamp SQL 类型来表示你的 Unix 时间戳,你必须自己做转换,没有 cookie。
  • 好的,我决定将其存储为标准文本格式,并尝试像这样保存它:'2016-12-01 20:00'。但是,这会导致异常:无法解析“TIMESTAMP”常量“2016-12-01 20:00”。我正在使用 DATETIME 数据类型。
猜你喜欢
  • 2014-01-28
  • 2012-10-04
  • 2012-12-17
  • 2015-09-25
  • 1970-01-01
  • 2023-04-09
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多