Jdbc時間型別的處理
在mysql中常用的時間型別為Date,Time,Timestamp(時間戳)
同樣,在java中也有三個時間型別與之對應,Date,Time,Timestamp,這三個時間類在java.sql包中,它們都是java.util.Date的子類,需要注意的是,Timestamp只是Date類的實現繼承,而不是型別繼承,下面請看JDK API1.6中關於三個子類的詳細介紹
public class Dateextends Date
一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為 SQL DATE
值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。
為了與 SQL DATE
的定義一致,由 java.sql.Date
例項包裝的毫秒值必須通過將小時、分鐘、秒和毫秒設定為與該例項相關的特定時區中的零來“規範化”。
public class Timeextends Date
一個與 java.util.Date
類有關的瘦包裝器 (thin wrapper),它允許 JDBC 將該類標識為 SQL
TIME
值。Time
類新增格式化和解析操作以支援時間值的 JDBC 轉義語法。
應該將日期元件設定為 1970 年 1 月 1 日的 "zero epoch" 值並且不應訪問該值。
public class Timestampextends
一個與 java.util.Date
類有關的瘦包裝器 (thin wrapper),它允許 JDBC API 將該類標識為 SQL
TIMESTAMP
值。它通過允許小數秒到納秒級精度的規範來新增儲存 SQL TIMESTAMP
小數秒值的能力。Timestamp 也提供支援時間戳值的 JDBC 轉義語法的格式化和解析操作的能力。
計算 Timestamp 物件的精度為二者之一:
19
,其為 yyyy-mm-dd hh:mm:ss 格式下的字元數20 + s
,其為 yyyy-mm-dd hh:mm:ss.[fff...] 格式下的字元數,s
表示給定 Timestamp 的標度(其小數秒精度)。
注:此型別由 java.util.Date
和單獨的毫微秒值組成。只有整數秒才會儲存在
java.util.Date
元件中。小數秒(毫微秒)是獨立存在的。傳遞不是 java.sql.Timestamp
例項的物件時,Timestamp.equals(Object)
方法永遠不會返回
true
,因為日期的毫微秒元件是未知的。因此,相對於 java.util.Date.equals(Object)
方法而言,Timestamp.equals(Object)
方法是不對稱的。此外,hashcode
方法使用底層
java.util.Date
實現並因此在其計算中不包括毫微秒。
鑑於 Timestamp
類和上述 java.util.Date
類之間的不同,建議程式碼一般不要將
Timestamp
值視為 java.util.Date
的例項。Timestamp
和
java.util.Date
之間的繼承關係實際上指的是實現繼承,而不是型別繼承。
具體的例子:
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.Time;
import java.sql.Timestamp;
import jdbc1025.DbUtil;
public class DateAndTime {
public static void main(String[] args) {
Connection conn=DbUtil.getConnection();
Date date=new Date(System.currentTimeMillis());
Time time=new Time(System.currentTimeMillis());
Timestamp timestamp=new Timestamp(System.currentTimeMillis());
PreparedStatement ps=null;
try{
ps=conn.prepareStatement("insert into DateTest values(null,?,?,?)");
for(int i=0;i<10;i++) {
ps.setDate(1, date);
ps.setTime(2, time);
ps.setTimestamp(3, timestamp);
ps.execute();
}
System.out.println("執行成功");
}catch(Exception e) {
e.printStackTrace();
}finally {
DbUtil.close(ps);
DbUtil.close(conn);
}
}
}