Konvertieren zwischen oracle.sql.TIMESTAMPTZ und Standard-JDBC-Klassen für DbUnit
Frage
Ich bin mit Oracle 10g und haben Spalten mit TYPE_NAME
TIMESTAMP(6) WITH TIME ZONE
Wenn in Java-Klassen aufgeblasen sie kommen als
oracle.sql.TIMESTAMPTZ
Aber DbUnit nicht verarbeiten kann Oracle bestimmte Klassen Strings Umwandlung zu XML zu schreiben. Ich frage mich, ob es eine einfache Möglichkeit für mich (zum Beispiel in meiner SELECT-Anweisung irgendwie) aus dieser Oracle spezifischen Zeitstempeln, um etwas in java.sql zu konvertieren.
Lösung
Ich habe nicht mit diesem Problem fertig zu genau hatte, aber ich nehme an, dass es als eine Zeichenfolge aus der SELECT-Abfrage durchkommen, die wäre in Ordnung.
könnten Sie die to_char Funktion. Zur Umwandlung in einen String. z:
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
Dies würde dann von Ihrem Programm als String zu sehen. TZD
enthält die Zeitzoneninformationen (von denen es keine in diesem Beispiel)
Später könnte dies dann von Java analysiert wird mit dem oracle.sql. TIMESTAMPTZ Klasse hat eine Methode dateValue
genannt, die eine java.sql.Date
Klasse zurückgibt.
Andere Tipps
Ich möchte bemerken, dass IYYY als Format für das Jahr mit möglicherweise keine gute Idee sein, wenn Sie wirklich das ISO Jahr erhalten möchten. Sie sollten YYYY statt IYYY verwenden.
Versuchen Sie SQL für 31.12.2012 mit
laufenselect to_char(timestamp'2012-12-31 00:00:00 +00:00', 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;
kehrt zurück. "2013-12-31 00: 00: 00,000000000", die nicht das Jahr ist, würde man erwarten