java.sql.SQLException:ORA-01843:不是有效月份

java.sql.SQLException:ORA-01843:不是有效月份,java,sql,oracle,date,Java,Sql,Oracle,Date,将数据插入oracle数据库时出现以下错误 java.sql.SQLException: ORA-01843: not a valid month 数据库中的日期为:年月日(2012年3月6日) 我正在通过以下方法将2012年3月6日转换为年月日: String s="06-03-2012"; String finalexampledt = new SimpleDateFormat("dd-MMM-yy").format(new SimpleDateFormat("dd-MM-yyyy").

将数据插入oracle数据库时出现以下错误

java.sql.SQLException: ORA-01843: not a valid month
数据库中的日期为:年月日(2012年3月6日)
我正在通过以下方法将2012年3月6日转换为年月日:

String s="06-03-2012";

String finalexampledt = new SimpleDateFormat("dd-MMM-yy").format(new SimpleDateFormat("dd-MM-yyyy").parse(s));
所以我得到了06-Mar-12,它与上面的数据库日期格式相同,但我仍然得到了错误。我插入如下内容:

在index.jsp中

 String todaydate="";

Calendar calendar1 = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
todaydate = dateFormat.format(calendar1.getTime());

<input type="text" name="datename" value="<%=todaydate%>"/>

任何想法请

问题是oracle使用NLS_DATE_语言获取当前月份的名称。所以你应该这么做

select * from nls_session_parameters
并检查是否有正确的值。您还可以使用以下选项进行检查,选择您获得的月份名称

select  TO_CHAR(TO_DATE('01-03-01', 'DD-MM-YY'), 'MON') from dual
我真的不明白为什么要将变量作为字符串值插入。只需在java中使用日期类型(在客户机上进行转换),然后插入它而不进行转换。如果您真的想将其作为字符串插入,我将使用像dd-MM-yyyy这样的转换,并使用to_DATE(,'dd-MM-yyyy')插入它

编辑:

在客户端上进行日期转换并使用

ps.setDate(2, <yourDate>);
ps.setDate(2,);
那么就做吧

("insert into mytablename (rest_dt) values to_date(?, 'DD-MM-YYYY')");  
试试这个

TO_DATE(?, 'DD-MM-YYYY','NLS_DATE_LANGUAGE = American')  

//从

获取rest\u dt列的数据类型是日期,因此需要提供一个日期。您可以使用
TO_DATE
函数将字符串转换为Oracle日期,以便插入语句

插入tablename(rest\u dt,othercolname)值(截止日期(?'dd-mm-yyyy'),?)

很好

只需确保绑定到第一个?-变量的字符串值的格式为dd mm yyyy。并且不要自己转换或格式化该值:TO_DATE函数完成该部分

这里不需要对nls_date_language之类的会话设置进行任何说明,因为您明智地选择在MM掩码(而不是MON)的月份使用语言不可知的设置

问候,

Rob.

哪种类型的栏有此日期?日期类型?是Oracle中的日期类型列如何向数据库中插入值?@student:您确定您的输入日期总是像dd-MM-yyyy(英国/法国格式),而不是MM-dd-yyyy(美国格式)?输入中是否有非日期的内容?您能给我们看一下java代码吗?是的,但我有更多字段,包括日期。您是否使用@user1143825 idea和-
setString(1,“06-03-2012”)
?是的,我试过了,但出现了相同的异常,我的插入代码有错误吗?我已经在我的网站上发布了question@user1143825同样的错误即将出现,我已经更新了我的问题并给出了详细信息,请参见您对我发布的查询的输出。没有同样的错误,我已经更新了我的问题并给出了详细信息,请参见我正在使用
中的
to_date()
,我是否需要再次将
s
转换为日期类型?我会在客户机上进行转换,因为您保存了到数据库的往返。当用户输入错误的日期格式时,将调用数据库并引发异常。之后,您将错误显示给您的用户,让他更正输入,然后再次将信息发送到数据库。如果您直接在客户机上进行转换,您可以更快地做出反应。但是如果你想这样做:你有没有研究过你设置查询的变量的值?同样的错误即将出现,我已经更新了我的问题,并给出了详细信息,请删除所有转换日期的代码。你写道:“我正在将2012年3月6日转换为……”。不要这样做,将2012年3月6日的内容提供给您的insert语句。
TO_DATE(?, 'DD-MM-YYYY','NLS_DATE_LANGUAGE = American')