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

PreparedStatement 設定日期時間:java.sql.Date 與 Timestamp 正確用法

     編輯:關於SqlServer

JDBC PreparedStatement 設定日期時間欄位時,需區分 java.sql.Date (僅日期)、java.sql.Time (僅時間)、java.sql.Timestamp (日期時間) 三種型別,並正確轉換自 java.util.Date 或字串。

標準流程:字串 → util.Date → sql.Date/Timestamp

// 1. 字串解析為 java.util.Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); // 注意: MM=月, mm=分
java.util.Date utilDate = sdf.parse("20240115");

// 2. 轉換為 java.sql.Date (僅保留日期部分)
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

// 3. 寫入資料庫
preparedStatement.setDate(1, sqlDate);

常見錯誤

  • SimpleDateFormat("yyyymmdd"):mm 代表分鐘,會導致月份固定為 01。正確為 MM。
  • 直接 utilDate.getTime() 回傳 long,不可直接指派給 java.sql.Date 變數,需用建構子 new java.sql.Date(time)。

完整型別對照表

資料庫型別JDBC 型別Setter 方法適用場景
DATEjava.sql.DatesetDate()生日、生效日
TIMEjava.sql.TimesetTime()上班打卡時間
TIMESTAMP / DATETIMEjava.sql.TimestampsetTimestamp()建立時間、異動時間

Timestamp 範例

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date utilDate = sdf.parse("2024-01-15 14:30:00");
java.sql.Timestamp ts = new java.sql.Timestamp(utilDate.getTime());
ps.setTimestamp(1, ts);

取得當前時間的多種寫法

// 1. java.util.Date
java.util.Date now = new java.util.Date();

// 2. 格式化輸出 yyyyMMdd
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String todayStr = sdf.format(now);

// 3. 分別取得 年/月/日
SimpleDateFormat sy = new SimpleDateFormat("yyyy");
SimpleDateFormat sm = new SimpleDateFormat("MM");
SimpleDateFormat sd = new SimpleDateFormat("dd");
String year = sy.format(now);  // 2024
String month = sm.format(now); // 01
String day = sd.format(now);   // 15

最佳實踐

  • 資料庫層統一使用 TIMESTAMP WITH TIME ZONE (或 DATETIMEOFFSET) 儲存 UTC 時間,應用層轉換時區。
  • Java 8+ 建議改用 java.time.LocalDateTime、Instant、DateTimeFormatter,並搭配 JDBC 4.2+ 的 setObject 直接綁定。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved