H2数据库中的当前时刻

时间:2015-12-27 06:46:59

标签: timestamp h2 sql-timestamp

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

CURRENT_TIMESTAMP函数提供当前数据库事务开始的时刻。有没有办法获得当前时刻,当前语句执行的时间?这可能与CURRENT_TIMESTAMP相同或更晚。

为了进行比较,在Postgres中,某些函数(如current_timestamp)会返回事务开始时间,而某些函数(如clock_timestamp)会返回实际的当前时钟时间。

1 个答案:

答案 0 :(得分:4)

当前时间(函数调用)

您可以为System.currentTimeMillis()

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

这不会生成语句执行开始的时间戳,但实际上是当前时间戳,只要H2实际调用该函数 - 即非确定性时刻,并且可能是不同的值同一陈述中的不同行。

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

当前时间(声明执行)

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

Connection.getClientInfo()

...然后从threadlocal.set(new Timestamp(System.currentTimeMillis()).toString()); 读取客户信息,如下所示:

ALIAS

然后:

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