将日期保存到 Oracle 时的奇怪行为

Weird behaviour when saving date to Oracle

我需要能够将应用程序中表示为 GregorianCalendar 的出生日期作为日期保存到 Oracle DB。

这应该很简单吧?错误的。这是我的问题。

当我保存出生日期时,我按以下方式进行操作

CallableStatement cstmtData= connection.prepareCall(sql);
stmtUpdateRec.setDate(1,birthDate==null?null:new java.sql.Date(birthDate.getTime().getTime()));

适用于 1950 年 1 月 1 日之后的日期。但是,1950 年 1 月 1 日之前的任何日期都将转换为 21 世纪,即 1917 年 1 月 2 日将作为 2017 年 1 月 2 日保存到数据库中。

知道为什么会这样吗?

谢谢你让我想起你。我想到了。 Roey Golzarpoor 你是对的,因为问题出在我的过程中的 SQL 语句之一。

我不知道为什么,但出于某种原因,我有 大写 DATE 字段。我在日期字段上使用了实际的 upper() 函数。这导致了这种绝对古怪的行为。