Преобразование между oracle.sql.TIMESTAMPTZ и стандартными классами JDBC для DbUnit - PullRequest
1 голос
/ 21 октября 2008

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

TIMESTAMP(6) WITH TIME ZONE

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

oracle.sql.TIMESTAMPTZ 

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

Ответы [ 2 ]

1 голос
/ 12 октября 2011

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

1 голос
/ 22 октября 2008

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

...