无论数据库供应商如何,如何通过JDBC从数据库服务器获取当前日期/时间?

时间:2010-11-18 06:12:03

标签: sql oracle jdbc db2 timestamp

我希望能够从我有连接的数据库服务器获取当前日期/时间(时间戳),而不管数据库是什么。 (理想情况下,我想要适用于Oracle,DB2,SQL Server和Postgres的东西。)

在网上搜索时,我看到了对LOCALTIMESTAMP函数和NOW()以及CURRENT_TIMESTAMP的暗示,但我看不清楚这些是否真正以跨RDBMS的互操作方式工作。

如果有必要,我愿意为不同的数据库编写替代方案,但是对于各个数据库供应商的最佳方法,我们甚至都没有看到任何清晰度。当然,如果每个都需要以不同的方式完成,那么必须有一些包装JDBC连接的Java库并执行此操作吗?

除了弄清楚要使用哪个SQL函数之外,我还想知道是否有一种标准方法来执行只是函数调用的SQL查询 - 某些DB似乎支持

SELECT fn();

...但Oracle似乎需要添加

...FROM DUAL;

我知道SQL“标准”有点狡猾,但我想知道在数据库和JDBC及相关库中工作的人比我更有经验,是否能指出我正确的方向。

谢谢!

4 个答案:

答案 0 :(得分:2)

函数调用因各种数据库而异。使用PostgreSQL时,Oracle中的SELECT fun_name()很简单,您必须添加FROM dual。在其他数据库中,我使用:Informix,您调用过程/函数而不是使用SELECT但使用execute procedure/function

我认为最简单的解决方案是在运行时检查当前正在使用的数据库,然后构建该数据库所需的查询。

答案 1 :(得分:1)

current_timestamp是ansi函数,为了兼容性,你可以使用dual: 从双

中选择current_timestamp

答案 2 :(得分:1)

您还应该记住,不同的RDBMS将以不同的格式返回当前日期和时间。至少,日期和时间之间的分隔符会有差异,有些默认情况下会包含微秒,有些会默认包含时区。

答案 3 :(得分:0)

或者编写一个函数/ sp来执行它并执行它。封装SP中的平台差异。