Как я могу получить текущую дату / время с сервера БД через JDBC, независимо от поставщика БД? - PullRequest
2 голосов
/ 18 ноября 2010

Я хотел бы иметь возможность получить текущую дату / время (метку времени) от сервера БД, к которому у меня есть Соединение, независимо от БД. (В идеале я хотел бы что-то, что работает для Oracle, DB2, SQL Server и Postgres).

Просматривая Интернет, я видел ссылки на функцию LOCALTIMESTAMP и NOW () и на CURRENT_TIMESTAMP, но я не видел ясности относительно того, работает ли какой-либо из них действительно совместимым образом в СУБД.

Я готов при необходимости закодировать альтернативы для разных БД, но даже не видел ясности относительно лучшего способа сделать это для отдельных поставщиков БД. И, конечно же, если это нужно сделать по-разному для каждого, должна быть какая-то библиотека Java, которая оборачивает соединения JDBC и делает это?

Помимо выяснения, какую функцию SQL использовать, мне также интересно, существует ли стандартный способ выполнения SQL-запроса, который является просто вызовом функции - некоторые БД, кажется, поддерживают

SELECT fn();

... но Oracle, похоже, требует добавления

...FROM DUAL;

Я знаю, что «стандарт» SQL немного хитроумный, но мне было интересно, сможет ли кто-нибудь, кто обладает большим опытом работы с базами данных, с JDBC и связанными библиотеками, указать мне правильное направление.

спасибо!

Ответы [ 4 ]

2 голосов
/ 18 ноября 2010

Вызовы функций различаются для разных баз данных. В то время как с PostgreSQL это просто SELECT fun_name() в Oracle, вы должны добавить FROM dual. В другой базе данных, с которой я работаю: Informix вы вызываете процедуру / функцию не с помощью SELECT, а с помощью execute procedure/function.

Я думаю, что самое простое решение - проверить во время выполнения, какая база данных используется в настоящее время, а затем создать запрос, требуемый этой базой данных.

1 голос
/ 18 ноября 2010

Также следует помнить, что разные СУБД будут возвращать текущую дату и время в разных форматах.По крайней мере, в разделителе между датой и временем будут различия, некоторые будут включать микросекунды по умолчанию, а некоторые будут включать часовой пояс по умолчанию.

1 голос
/ 18 ноября 2010

current_timestamp - это функция ANSI, и для совместимости вы можете использовать dual: выберите current_timestamp из двойного

0 голосов
/ 18 ноября 2010

Или напишите функцию / sp, чтобы сделать это, и выполните это.Инкапсулируйте различия платформы в SP.

...