getString ("daterow") возвращает другой формат от 10g до 11g - PullRequest
2 голосов
/ 27 июня 2011

У меня большое унаследованное приложение, которое вызывает resultSet.getString (column), а столбец, к которому он обращается, - это формат DATE в Oracle. Этот код прекрасно работал с клиентом Oracle 10g. Будет возвращено следующее:

'2008-05-19 10: 03: 56,0'

Однако, когда я использую клиент Oracle 11g (сервер не изменился), он выдает следующее:

'2008-05-19 10: 03: 56'

Теперь я знаю, что правильный способ исправить это - изменить код, чтобы НЕ использовать getString для функции даты, но это тонна кода, и мы пытаемся сделать это без внесения изменений в код.

Есть ли какие-либо параметры конфигурации, которые я могу использовать, чтобы исправить это на стороне клиента Oracle?

Я пробовал следующее, и он даже не меняет формат:

Statement stmt = conn.createStatement();
stmt.execute("alter session set nls_date_format = 'YYYY-MM-DD HH24:MI'");

Этот снимал секунды, но при выполнении запроса он все еще использует один с секундами. Поэтому я не думаю, что обновление NSL_DATE_FORMAT будет работать.

Ответы [ 3 ]

1 голос
/ 06 июля 2011

Похоже, что в приведенной ниже ветке указано, что формат даты жестко задан в драйверах jdbc:

Java: ResultSet getString () отличается в разных средах

Если этов этом случае единственными решениями являются:

  1. Изменить весь код для использования getDate ()

  2. Изменить все запросы для использования to_char(дата: «ГГГГ-ММ-ДД ЧЧ24: МИ: СС.Ф»)

Кто-нибудь видит какое-либо другое решение?

0 голосов
/ 27 июня 2011

В клиентской среде установите переменную среды NLS_DATE_FORMAT в нужный вам формат и запустите вашу программу:

set NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS.F

EDIT:

Возможно ли создать триггер базы данных?

CREATE OR REPLACE TRIGGER data_logon_trigger
    AFTER LOGON
    ON DATABASE

BEGIN
   EXECUTE IMMEDIATE
   'alter session set nls_date_format = ''YYYY-MM-DD HH24:MI:SS.F'' ';
END;

Это метод грубой силы - он влияет на каждый вход в базу данных.

0 голосов
/ 27 июня 2011

Не могли бы вы сделать это в своем коде:

alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS.F'

Если у вас есть центральная точка, в которой создаются Соединения, вы можете сделать это там.

(Вот источник, который я нашел до сих пор для Литералы данных / времени Oracle . Возможно, где-то более ясный.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...