Java中的Date Time 與SQL Server 2005裡的Datetime 之間的互動

來源:互聯網
上載者:User

標籤:

Preface

Environment:
Platform: Windows XP
Language: Java 1.5
IDE: MyEclipse 6.0.1
Database: SQL Server 2005 Enterprise en

Introduction

本文主要講述Java中的Date Time 與SQL Server 2005裡的Datetime 如何進行互動。涉及到的Date Type有
java.util.Date
java.sql.Date
java.sql.Time
java.sql.Timestamp

Section 1 - java.util.Date

經過一些testing,大概瞭解了這幾個類的實際用法與限制。

java.util.Date create 的instance 是不能直接讓JDBC 存到DB的,它會出現如下Exception:
Conversion failed when converting datetime from character string.

要將java.util.Date存到DB必須經過 type conversion成為sql下的Date,Time或Timestamp。

Section 2 - java.sql.Date

java.sql.Date只能將date存到DB,time將被截取而由DB中最小的time值(00:00:00)所取代。

Code:
  java.util.Date currentDateTime = new java.util.Date();
  System.out.println(currentDateTime);
  System.out.println(currentDateTime.getTime());
  Date currentDate = new Date(currentDateTime.getTime());
  System.out.println(currentDate);
  System.out.println(currentDate.getTime());
  String strSQL = "insert into TestDateTime values(‘"+currentDate+"‘)";
  executeHelper(strSQL);

Console Output:
Tue May 20 15:51:48 CST 2008
1211269908671
2008-05-20
1211269908671

Datebase Output:
2008-5-20 0:00:00

從result可以看出java.sql.Date實際並不是在其instance中就截取time,因為得到的Long值仍然跟java.util.Date的Long值一樣,只是在顯示輸出或者對DB操作時才截去tIme的輸出。0:00:00是由DB其System的最小time補充的。

Section 3 - java.sql.Time

java.sql.Time只能講time存到DB,date將被截取而由DB中最小的date值(1900-1-1)所取代。

Code:
  java.util.Date currentDateTime = new java.util.Date();
  System.out.println(currentDateTime);
  System.out.println(currentDateTime.getTime());
  Time currentTime = new Time(currentDateTime.getTime());
  System.out.println(currentTime);
  System.out.println(currentTime.getTime());
  String strSQL = "insert into TestDateTime values(‘"+currentTime+"‘)";
  executeHelper(strSQL);

Console Output:
Tue May 20 16:03:52 CST 2008
1211270632312
16:03:52
1211270632312

Datebase Output:
1900-1-1 16:03:52

從result可以看出java.sql.Time實際並不是在其instance中就截取date,因為得到的Long值仍然跟java.util.Date的Long值一樣,只是在顯示輸出或者對DB操作時才截去date的輸出。1900-1-1是由DB其System的最小date補充的。

Section 4 - java.sql.Timestamp

java.sql.Timestamp可以將date和time都存到DB。

Code:
  java.util.Date currentDateTime = new java.util.Date();
  System.out.println(currentDateTime);
  System.out.println(currentDateTime.getTime());
  Timestamp currentTimestamp = new Timestamp(currentDateTime.getTime());
  System.out.println(currentTimestamp);
  System.out.println(currentTimestamp.getTime());
  String strSQL = "insert into TestDateTime values(‘"+currentTimestamp+"‘)";
  executeHelper(strSQL);

Console Output:
Tue May 20 16:24:40 CST 2008
1211271880796
2008-05-20 16:24:40.796
1211271880796

Datebase Output:
2008-5-20 16:24:40

從result可以看出java.sql.Timestamp的儲存格式跟java.util.Date的不同,Timestamp的格式是專門對DB操作所定義的正常化格式,也就是說DB只能接收到這種格式傳過來的值,這也可以大概知道為什麼java.util.Date為什麼不能直接傳值給DB了。

Java中的Date Time 與SQL Server 2005裡的Datetime 之間的互動

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.