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