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.

InformationsquelleAutor Mark McK | 2014-01-16
Schreibe einen Kommentar