如何在H2数据库中获取实际的当前时钟时间,当前时刻?
该CURRENT_TIMESTAMP
函数给出当前数据库事务开始的时刻。有没有办法获取当前时刻,当前语句执行的时间?这可能与 相同或晚于CURRENT_TIMESTAMP
。
作为比较,在Postgres中,一些函数如current_timestamp
返回事务开始时间,而一些函数如clock_timestamp
返回实际当前时钟时间。
如何在H2数据库中获取实际的当前时钟时间,当前时刻?
该CURRENT_TIMESTAMP
函数给出当前数据库事务开始的时刻。有没有办法获取当前时刻,当前语句执行的时间?这可能与 相同或晚于CURRENT_TIMESTAMP
。
作为比较,在Postgres中,一些函数如current_timestamp
返回事务开始时间,而一些函数如clock_timestamp
返回实际当前时钟时间。
您可以创建一个ALIAS
for System.currentTimeMillis()
:
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";