Oracle Prepared Statement - ORA-01821:日期格式无法识别

时间:2014-01-16 08:10:26

标签: java sql date oracle11g wildcard

我目前正在尝试将日期插入到我的本地Oracle数据库中,insert是在使用通配符的java JAR文件中编写的。如果我将日期发送为null,则INSERT有效但是当我尝试发送日期时,我收到以下错误:

ORA-01821: date format not recognized

我运行了两个SQL命令:

SELECT PARAMETER, VALUE FROM v$nls_parameters;

SELECT CURRENT_TIMESTAMP FROM DUAL;

返回此数据:

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   

在查看上面的数据后,我试图修改我准备好的语句以匹配显示的时间戳:

TO_TIMESTAMP(?,'DD-MON-RR HH24.MI.SSXFF TZR')

TO_TIMESTAMP(?,'DD-MON-RR HH24.MI.SSXFF')

在哪里?是我使用java传递的通配符值,即interaction.getStartDate();

有谁知道如何找到正确的格式或我错在哪里?我在网上看了最近几天,我感到非常困惑。

1 个答案:

答案 0 :(得分:0)

经过一些测试后,我得到了正确存储到数据库中的日期。我在TO_TIMESTAMP调用中使用的日期格式是'DD-Mon-RRRR HH:MI:SS PM',完整插入如下所示:

TO_TIMESTAMP(?,'DD-Mon-RRRR HH:MI:SS PM')