関連すると思われる 2 つの問題に直面しています。
Oracle (10g) データベースに対して JDBC 選択を実行しようとしていますが、結果セットに日付列がタイムスタンプとして表示されます
ResultSetMetaData rsMetaData = null;
rsMetaData = resultSet.getMetaData();
if(rsMetaData.getColumnType(1) == java.sql.Types.TIMESTAMP){
System.out.println("Timestamp");
}
Oracle のこの列のデータ型は DATE なので、返される columnType は DATE であると予想さresultSetMeta
れますが、常にTIMESTAMP
.
このデータを処理した後、sqlldr を使用して同じデータを Oracle データベースにロードしようとしています。入力で受け取ったデータ型が間違っているため、出力制御ファイルは TIMESTAMP を使用します。(この制御ファイルは、resultSetMetaData に基づいて私のプログラムによって作成されます。) 以下は、制御ファイルでの表示方法です。
TIMESTAMP "yyyy-MM-dd HH24:mi:ss.ff"
この制御ファイルを使用して次のデータをロードしようとすると、問題が発生します。
1987-06-17 00:00:00.0
sqlldr は、警告なしでこのデータを Oracle に正常にロードしますが、ターゲット テーブルを確認すると、期待/必須の「1987 年 6 月 17 日」ではなく「1987 年 6 月 16 日」という日付が表示されます。これは、時間「00:00:00.0」がオラクルによって解釈される方法が原因である可能性があります。
上記の問題 1 と 2 はどちらも私にとって深刻な問題であり、説明を見つけることができませんでした。