Преобразование между oracle.sql.TIMESTAMPTZ и стандартными классами JDBC для DbUnit

StackOverflow https://stackoverflow.com/questions/223096

Вопрос

Я использую Oracle 10g и у меня есть столбцы с Type_Name

TIMESTAMP(6) WITH TIME ZONE

При накачке на классы Java они выглядят как

oracle.sql.TIMESTAMPTZ 

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

Это было полезно?

Решение

Мне не приходилось сталкиваться с этой проблемой в точности, но я предполагаю, что было бы хорошо, если бы она проходила как строка из запроса 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 .

Другие советы

Я хотел бы отметить, что использование 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 " это не тот год, который вы ожидаете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top