Преобразование между oracle.sql.TIMESTAMPTZ и стандартными классами JDBC для DbUnit
Вопрос
Я использую 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 " это не тот год, который вы ожидаете.