1. 程式人生 > >Jdbc時間型別的處理

Jdbc時間型別的處理

在mysql中常用的時間型別為Date,Time,Timestamp(時間戳)

同樣,在java中也有三個時間型別與之對應,Date,Time,Timestamp,這三個時間類在java.sql包中,它們都是java.util.Date的子類,需要注意的是,Timestamp只是Date類的實現繼承,而不是型別繼承,下面請看JDK API1.6中關於三個子類的詳細介紹

public class Date
extends Date

一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。

為了與 SQL DATE 的定義一致,由 java.sql.Date 例項包裝的毫秒值必須通過將小時、分鐘、秒和毫秒設定為與該例項相關的特定時區中的零來“規範化”。 

public class Time
extends Date

一個與 java.util.Date 類有關的瘦包裝器 (thin wrapper),它允許 JDBC 將該類標識為 SQL TIME 值。Time 類新增格式化和解析操作以支援時間值的 JDBC 轉義語法。

應該將日期元件設定為 1970 年 1 月 1 日的 "zero epoch" 值並且不應訪問該值。 

public class Timestamp
extends
Date

一個與 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 的例項。Timestampjava.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);
		}
		
	}

}