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

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

java.sql.SQLException: ORA-01843: not a valid month 

在数据库中日期为:dd-MMM-yy(06-MAR-12)
我通过以下方法将06-03-2012转换为dd-MMM-yy:

 String s="06-03-2012"; String finalexampledt = new SimpleDateFormat("dd-MMM-yy").format(new SimpleDateFormat("dd-MM-yyyy").parse(s)); 

所以我得到了06年3月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=""/> 

在servlet中(doPost)

 String s=request.getParameter("datename"); PreparedStatement ps=con.prepareStatement("insert into tablename(rest_dt, othercolname) values (to_date(?, 'dd-mm-yyyy'), ?)"); ps.setString(1, s); ps.setString(2, otherstringdata); int rs=ps.executeUpdate(); 

请问任何想法

所以

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

试试这个

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

//从Oracle文档中获取

您的rest_dt列的数据类型是DATE ,因此您需要提供一个。 您可以使用TO_DATE函数将字符串转换为Oracle DATE,因此您的insert语句

insert into tablename(rest_dt, othercolname) values (to_date(?, 'dd-mm-yyyy'), ?)

很好。

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

这里没有关于会话设置的任何内容,例如nls_date_language,因为您明智地选择使用MM掩码(而不是MON)来使用月份的语言无关设置。

问候,
抢。

问题是oracle使用NLS_DATE_LANGUAGE来获取当月的当前名称。 所以你应该这样做

 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, );