2008-10-21 2 views
1

Я бегу Oracle 10g и есть столбцы с TYPE_NAMEПреобразование между oracle.sql.TIMESTAMPTZ и стандартных классов JDBC для DbUnit

TIMESTAMP(6) WITH TIME ZONE

При надувании на классы ява они выходят, как

oracle.sql.TIMESTAMPTZ

Но DbUnit не может обрабатывать преобразование специальных классов Oracle в строки для записи в XML. Мне интересно, есть ли какой-либо простой способ конвертировать (например, в мой оператор SELECT) из этих временных меток Oracle в нечто вроде java.sql.

ответ

1

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

Вы можете использовать функцию to_char. Чтобы преобразовать его в строку. например:

SQL> select to_char(systimestamp, 'YYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual; 

D 
---------------------------------- 
2008-10-21 17:00:43.501591 

Это будет видно вашей программой в виде строки. TZD содержит информацию о часовом поясе (которых нет в этом примере)

Позже это может быть проанализировано Java с использованием класса SimpleDateFormat.

В качестве альтернативы класс oracle.sql.TIMESTAMPTZ имеет метод, называемый dateValue, который возвращает класс java.sql.Date.

1

Я хотел бы отметить, что использование формата IYYY в течение года может быть не очень хорошей идеей, если вы действительно не хотите получить год ISO. Вы должны использовать YYYY вместо IYYY.

Попробуйте запустить SQL для 31.12.2012 используя

select to_char(timestamp'2012-12-31 00:00:00 +00:00', 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual; 

возвращается "2013-12-31 00: 00: 00.000000000", который не является год можно было бы ожидать.