我们刚刚从ojdbc14切换到ojdbc6,并注意到当我们通过预准备语句和preparedStatement.setTime(1, new javax.sql.Time(new Date().getTime()))
将javax.sql.Time值插入Oracle列时,其行为发生了变化。它曾经将日期和时间信息都插入到表中,但是使用新驱动程序时,似乎只捕获了时间部分,并且我们在数据库中看到的值的日期为1970年1月1日。
现在,很明显就是这种情况,我的问题是我可以在哪里找到描述此行为的官方文档或更改说明。
由于
答案 0 :(得分:2)
在我看来,最好通过将值作为日期/时间对象(例如java.sql.Timestamp
)传递给您,然后将其读取。因此,您可以使用public void setTimestamp(int parameterIndex, Timestamp x)
来设置相应的值。使用起来要干净得多。
然后,您可以使用Java SimpleDateFormat在从数据库中读取数据后根据自己的喜好格式化数据。
但是,您可以在此Oracle JDBC Driver Documentation中找到一些记录有时间戳使用的错误。这些可能与您没有直接关系,但请看以下内容:#BUG-6749320,#6870832,#7028625,#6441084
您可能希望了解此处的更改:Oracle JDBC FAQ部分中提供的"What is going on with DATE and TIMESTAMP?"。