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";
如何获取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";