Oracle Vorbereitete Anweisung - ORA-01821: date format nicht erkannt
Ich bin versucht derzeit, einfügen von Daten in meiner lokalen Oracle-Datenbank einfügen ist schriftlich innerhalb einer java JAR-Datei, die verwendet Platzhalter. Das EINFÜGEN funktioniert, wenn ich senden Sie die Daten als null, aber wenn ich versuche zu senden, einen Termin bekomme ich folgende Fehlermeldung:
ORA-01821: date format not recognized
Habe ich lief zwei SQL-Befehle:
SELECT PARAMETER, VALUE FROM v$nls_parameters;
SELECT CURRENT_TIMESTAMP FROM DUAL;
Die Rückkehr dieser Daten:
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_LANGUAGE ENGLISH
NLS_TERRITORY UNITED KINGDOM
NLS_CURRENCY £
NLS_ISO_CURRENCY UNITED KINGDOM
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE ENGLISH
NLS_CHARACTERSET AL32UTF8
NLS_SORT BINARY
NLS_TIME_FORMAT HH24.MI.SSXFF
NLS_TIMESTAMP_FORMAT DD-MON-RR HH24.MI.SSXFF
NLS_TIME_TZ_FORMAT HH24.MI.SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH24.MI.SSXFF TZR
NLS_DUAL_CURRENCY €
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
19 rows selected
CURRENT_TIMESTAMP
------------------------------------
16-JAN-14 08.03.06.437000000 EUROPE/
LONDON
Nach einem Blick auf die Daten oben habe ich versucht zu ändern, meine vorbereitete Anweisung entsprechend der Zeitstempel angezeigt:
TO_TIMESTAMP(?,'DD-MON-RR HH24.MI.SSXFF TZR')
TO_TIMESTAMP(?,'DD-MON-RR HH24.MI.SSXFF')
Wo ? ist der wildcard-Wert, leite ich in der Verwendung von java, d.h. interaction.getStartDate();
Weiß jemand, wie finden Sie das richtige format oder wohin ich gehe falsch gemacht? Ich habe sah online für die letzten paar Tage und bin völlig ratlos.
- Warum brauchen Sie ein Datum-format? Datum-Formate sind für das konvertieren zwischen Zeichenketten und Datum.
- Ich bin nicht in der Steuerung des Datenbank-Einstellungen und das Feld als TIMESTAMP
- Es gibt Termine, die in der Datenbank bereits, und Beispiel einer von diesen ist: 17-JUL-13 15.31.07.000000000
- Aber der JDBC-Treiber sollte sich darum kümmern. Sie nur binden, java.util.Date oder java.sql.Date-Objekt (oder java.sql.Zeitstempel, wenn Sie Bruchteile von Sekunden), und der JDBC-Treiber sollten die Karte, um eine korrekte SQL-Anweisung. BTW, dein Beispiel (17-JUL-13 15.31.07.000000000) nicht zeigen, wie Zeitstempel gespeichert sind, nur wie Sie präsentiert werden (wie ein stechen), wenn du ihn zu Holen.
- java.util.Datum kann nicht gebunden werden. java.sql.Datum für Datum ohne Zeit, und java.sql.Zeitstempel für Datum und Uhrzeit. Ich bin damit einverstanden, dass dies die richtige Lösung, obwohl.
- Aktuell das java-Objekt einen String-Wert für das Datum, ich habe versucht, dies zu ändern, um ein Datum-Objekt und übergeben Sie ein Datum durch Oracle, es funktionierte, und gespeichert, ein Datum aber das Datum gespeichert wurde, nicht das Datum, das ich gesendet.
- Sorry, mein schlechtes über java.util.Datum. Es funktioniert in Hibernate, deshalb habe ich es erwähnt.
- Ok, ich werde versuchen, senden Sie eine sql.timestamp-Objekt jetzt und erhalten Sie zurück zu Euch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das Datum zum speichern in der Datenbank richtig nach einigen tests. Das Datum-format, dass ich in der TO_TIMESTAMP-Aufruf war 'DD-Mon-RRRR HH:MI:SS Uhr', full insert unten gezeigt: