تحويل بين oracle.sql.TIMESTAMPTZ والطبقات JDBC القياسية لDbUnit
سؤال
وأنا على التوالي أوراكل 10g ولها أعمدة مع TYPE_NAME
TIMESTAMP(6) WITH TIME ZONE
عند تضخم في الطبقات جافا يخرجون ك
oracle.sql.TIMESTAMPTZ
ولكن DbUnit لا يمكن التعامل مع تحويل أوراكل فئات معينة إلى سلاسل للكتابة إلى XML. أنا أتساءل إذا كان هناك أي وسيلة سهلة بالنسبة لي لتحويل (مثلا، في بياني SELECT بطريقة أو بأخرى) من هذه الطوابع الزمنية المحددة أوراكل لشيء في 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
المعلومات الزمنية (التي ليس هناك شيء في هذا المثال)
وفي وقت لاحق، وهذا يمكن بعد ذلك تحليل من قبل باستخدام جافا في SimpleDateFormat الصف.
وبدلا من ذلك، oracle.sql. الطبقة TIMESTAMPTZ لديها طريقة تسمى dateValue
وترجع فئة java.sql.Date
.
نصائح أخرى
وأود أن ملاحظه أن استخدام IYYY كتنسيق للسنة قد لا تكون فكرة جيدة إلا إذا كنت تريد حقا أن الحصول على السنة ISO. يجب عليك استخدام YYYY بدلا من IYYY.
وحاول تشغيل SQL الخاصة بك ل2012/12/31 باستخدام
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" التي ليست السنة تتوقعون