Conversion entre les classes oracle.sql.TIMESTAMPTZ et JDBC standard pour DbUnit
Question
J'utilise Oracle 10g et j'ai des colonnes avec Type_Name
TIMESTAMP(6) WITH TIME ZONE
Une fois gonflés dans les classes Java, ils apparaissent 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 est possible de convertir facilement (par exemple, dans ma déclaration SELECT) ces horodatages spécifiques Oracle en quelque chose dans java.sql.
La solution
Je n'ai pas eu à traiter ce problème avec précision, mais je présume que le faire passer comme une chaîne à partir de la requête SELECT conviendrait.
Vous pouvez utiliser le à_char . une fonction. Pour le convertir en 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 sur le fuseau horaire (aucune dans cet exemple)
Plus tard, cela pourrait être analysé par Java à l'aide de SimpleDateFormat classe.
Sinon, le oracle.sql. La classe TIMESTAMPTZ a une méthode appelée dateValue
qui renvoie une classe java.sql.Date
.
Autres conseils
Je voudrais faire remarquer qu’utiliser IYYY comme format de l’année peut ne pas être une bonne idée, à moins que vous ne souhaitiez vraiment obtenir l’année ISO. Vous devez utiliser YYYY au lieu de IYYY.
Essayez d’exécuter votre code SQL pour le 31.12.2012 avec
.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 " ce qui n’est pas l’année que vous attendez.