首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 與 Oracle 交互:正確處理 java.util.Date 轉 java.sql.Date 避免類型轉換異常

     編輯:Java 相關知識

問題場景

在執行數據庫 INSERT 操作時,需要將當前時間存入 Oracle 數據庫。若直接嘗試將 java.util.Date 設置到 PreparedStatement 的 setDate 方法中:

ps.setDate(new java.util.Date()); // 編譯報錯或運行時類型轉換異常

會導致類型轉換失敗,因為 JDBC 的 setDate 方法要求參數為 java.sql.Date 類型。

正確解決方案

需顯式將 java.util.Date 轉換為 java.sql.Date,利用後者的構造函數接收毫秒時間戳:

java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
ps.setDate(sqlDate);

核心差異說明

特性java.util.Datejava.sql.Date
包路徑java.utiljava.sql
用途通用日期時間處理JDBC 標準 SQL DATE 類型映射(僅保留年月日,時分秒歸零)
繼承關係無extends java.util.Date
構造函數多種public Date(long date) // 毫秒時間戳

最佳實踐建議

  1. 統一轉換工具類:在項目中封裝 DateUtils.toSqlDate(utilDate) 避免重複代碼。
  2. 時區一致性:確保應用服務器、JVM、數據庫會話時區一致,避免日期偏移。
  3. 現代化替代:Java 8+ 建議使用 LocalDate / LocalDateTime 配合 JDBC 4.2+ 的 setObject/getObject 直接操作,更優雅且線程安全。

擴展:Timestamp 處理

若需保留時分秒毫秒,請使用 java.sql.Timestamp:

java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
ps.setTimestamp(ts);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved