2008-10-21 4 views
1

Je suis en cours d'exécution Oracle 10g et ont des colonnes avec TYPE_NAMEConversion entre oracle.sql.TIMESTAMPTZ et les classes JDBC standard pour DbUnit

TIMESTAMP(6) WITH TIME ZONE

Lorsqu'il est gonflé dans des classes java ils viennent comme

oracle.sql.TIMESTAMPTZ

Mais DbUnit ne peut pas gérer la conversion de classes spécifiques Oracle en chaînes pour l'écriture en XML. Je me demande s'il y a un moyen simple pour moi de convertir (disons, dans mon instruction SELECT en quelque sorte) de ces timestamps spécifiques à Oracle à quelque chose dans java.sql.

Répondre

1

Je n'ai pas eu à faire face exactement à ce problème, mais je présume que le faire passer comme une chaîne de la requête SELECT serait bien.

Vous pouvez utiliser la fonction to_char. Pour le convertir en une chaîne. par exemple:

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 

Ceci serait alors vu par votre programme comme une chaîne. TZD inclut des informations de fuseau horaire (dont il n'existe aucune dans cet exemple)

Plus tard, cela pourrait ensuite être analysé par Java en utilisant la classe SimpleDateFormat.

Alternativement, la classe oracle.sql.TIMESTAMPTZ a une méthode appelée dateValue qui renvoie une classe java.sql.Date.

1

Je voudrais faire remarquer que l'utilisation de IYYY comme format pour l'année n'est peut-être pas une bonne idée, sauf si vous voulez vraiment obtenir l'année ISO. Vous devriez utiliser YYYY au lieu de IYYY.

Essayez d'exécuter votre SQL pour 31.12.2012 en utilisant

select to_char(timestamp'2012-12-31 00:00:00 +00:00', 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual; 

retours "2013-12-31 00: 00: 00,000000000" qui n'est pas l'année que vous attendez.

Questions connexes