我正在尝试将日期值插入到 oracle 数据库中,但它抛出 java.sql.SQLDataException: ORA-01843: 无效月份 发生的最奇怪的事情是,当我打开 oracle 仪表板并在 sql 命令中执行相同的查询时,它的工作完美,但是当尝试从 java 执行查询时,它启动了异常
这是我的代码
try {
Connection con=Connexion.getConnection();
Statement stmt=con.createStatement();
Format formatter = new SimpleDateFormat("MM/dd/YYYY");
String ddebut=formatter.format(dateDebut);
String dfin=formatter.format(dateFin);
System.out.println(ddebut);
System.out.println(dfin);
String query ="INSERT INTO Intervention (titre,lieu,etat,description,datedebut,datefin,ide) VALUES ('"+titre+"','"+lieu+"','"+etat+"','"
+description+"','"+ddebut+"','"+dfin+"',"+cin+")";
System.out.println(query);
test=stmt.executeUpdate(query);
System.out.println(formatter.format(dateDebut));
ResultSet rs=stmt.executeQuery("select intervention_seq.currval from DUAL");
rs.next();
id=rs.getInt(1);
con.close();
}catch(Exception e){ System.out.println(e);}
return test==1;
}
我确定问题来自查询并且属性的所有值都是正确的
答案 0 :(得分:1)
这几乎肯定是 NLS 问题。尝试提供您的日期为“20/05/2021”和“19/05/2021”。每个客户端(例如,Oracle 仪表板和您的 Java 程序是两个不同的客户端)可以具有不同的 NLS 设置。除其他事项外,这些控制着默认的日期和时间格式。
答案 1 :(得分:1)
Oracle 默认接受 DD-MON-RR(有时是 DD-MON-YYYY)格式的日期。但是,您已指定 MM/dd/YYYY。
解决方案 1
您可以通过更改日期格式来简单地解决此问题,
new SimpleDateFormat("MM/dd/YYYY")
对此,
new SimpleDateFormat("dd-MMM-yy")
(如果默认格式是DD-MON-RR)
或者这个,
new SimpleDateFormat("dd-MMM-yyyy")
(如果默认格式为 DD-MON-YYYY)
注意:您可以简单地通过 select sysdate from dual;
检查默认格式,并查看它返回什么。如果它显示类似 01-MAY-21
的内容,那么您的 Oracle 的默认日期格式应该是 DD-MON-RR。
解决方案 2
保留 SimpleDateFormat,但使用 to_date('date here', "MM/DD/YYYY")