我正在将数据插入到我的 oracle sql 数据库中,其中一个值是 1980 年 2 月 29 日的日期。当我添加这个值时,我收到这个错误
java.sql.BatchUpdateException: ORA-01839: date not valid for month specified
at oracle.jdbc.driver.OraclePreparedStatement.generateBatchUpdateException(OraclePreparedStatement.java:10891)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatchWithoutQueue(OraclePreparedStatement.java:10311)
at oracle.jdbc.driver.OraclePreparedStatement.executeLargeBatch(OraclePreparedStatement.java:10016)
at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:5420)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:289)
我看到的解决方案是使用
add_months
但我无法将其与 jdbc 的PreparedStatements 一起应用。我该怎么做?这是我与准备好的语句一起使用的代码
String personneString = "INSERT INTO personne (idPersonne, datedenaissance) VALUES (?, ?)";
Date annivDate = (anniv == null) ? null : Date.valueOf(anniv);
try (PreparedStatement statementPersonne = connection.prepareStatement(personneString)) {
statementPersonne.setInt(1, idPersonne);
statementPersonne.setDate(2, annivDate);
statementPersonne.addBatch();
statementPersonne.executeBatch();
} catch (SQLException e) {
System.out.println("date = " + annivDate);
e.printStackTrace();
}
哪个打印
date = 1980-02-29
避免两门
Date
课程。他们有严重的缺陷。几年前,它们被 JSR 310 中定义的现代 java.time 类取代。
对于仅日期值,请使用
java.time.LocalDate
。
LocalDate ld = LocalDate.parse( "1980-02-29" ) ;
myPreparedStatement.setObject( … , ld ) ;
重审。
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;