H2数据库中的当前时刻

Current moment in H2 database

如何获取H2数据库中的实际当前时钟时间,当前时刻?

CURRENT_TIMESTAMP函数给出了当前数据库事务开始的时刻。有没有办法获取当前时刻,当前语句执行的时间?这可能与 CURRENT_TIMESTAMP 相同或晚于。

为了比较,在Postgres, some functions such as current_timestamp return the transaction start time while some functions such as clock_timestamp return中的实际当前时钟时间。

当前时间(函数调用)

您可以为 System.currentTimeMillis() 创建一个 ALIAS:

CREATE ALIAS CURRENT_TIME_MILLIS FOR "java.lang.System.currentTimeMillis";

这不会生成语句执行开始的时间戳,但实际上是 当前 时间戳,每当 H2 实际调用该函数时 - 即非确定性时刻,也许是同一语句中不同行的不同值。

但也许,这足以满足您的要求。

当前时间(语句执行时间)

如果上述非确定性解决方案对您来说不够精确,另一种选择是实现一个 JDBC 包装器来拦截所有语句,将当前时间设置为某个线程本地(H2 不支持 Connection.getClientInfo()):

threadlocal.set(new Timestamp(System.currentTimeMillis()).toString());

...然后从 ALIAS 中读取客户信息,如下所示:

public static Timestamp statementTime() throws SQLException {
    return Timestamp.valueOf(threadlocal.get());
}

然后:

CREATE ALIAS STATEMENT_TIME FOR "com.example.statementTime";