我面临两个我认为可能相关的问题。
我正在尝试对 oracle (10g) 数据库执行 JDBC 选择,结果集将日期列显示为时间戳
ResultSetMetaData rsMetaData = null;
rsMetaData = resultSet.getMetaData();
if(rsMetaData.getColumnType(1) == java.sql.Types.TIMESTAMP){
System.out.println("Timestamp");
}
oracle 中此列的数据类型是 DATE 所以我希望返回的 columnTyperesultSetMeta
是 DATE 但它总是TIMESTAMP
。
处理完这些数据后,我尝试使用 sqlldr 将其加载到 Oracle 数据库由于输入中接收到的数据类型错误,输出控制文件使用 TIMESTAMP。(这个控制文件是由我的程序基于 resultSetMetaData 创建的。)这正是它在控制文件中的显示方式。
TIMESTAMP "yyyy-MM-dd HH24:mi:ss.ff"
当我尝试使用此控制文件加载以下数据时,问题就开始了。
1987-06-17 00:00:00.0
sqlldr 成功地将这些数据加载到 Oracle 中而没有任何警告,但是当我检查目标表时,我得到的日期为“1987 年 6 月 16 日”,而不是预期/要求的“1987 年 6 月 17 日”。这可能是因为 oracle 解释时间“00:00:00.0”的方式。
上面的问题 1 和 2 对我来说都是严重的问题,我找不到解释。