تحويل بين oracle.sql.TIMESTAMPTZ والطبقات JDBC القياسية لDbUnit

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

سؤال

وأنا على التوالي أوراكل 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" التي ليست السنة تتوقعون

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top