在執行數據庫 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.Date | java.sql.Date |
|---|---|---|
| 包路徑 | java.util | java.sql |
| 用途 | 通用日期時間處理 | JDBC 標準 SQL DATE 類型映射(僅保留年月日,時分秒歸零) |
| 繼承關係 | 無 | extends java.util.Date |
| 構造函數 | 多種 | public Date(long date) // 毫秒時間戳 |
DateUtils.toSqlDate(utilDate) 避免重複代碼。LocalDate / LocalDateTime 配合 JDBC 4.2+ 的 setObject/getObject 直接操作,更優雅且線程安全。若需保留時分秒毫秒,請使用 java.sql.Timestamp:
java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
ps.setTimestamp(ts);