1 Java中的時間類型

來源:互聯網
上載者:User

標籤:connect   insert   java   時間轉換   轉換   總結   ext   etc   rom   

總結:sql中的時間轉 util的時間直接賦值即可;反過來,必須先吧util下的時間轉換成毫秒,再通過sql的構造器產生sql的時間格式。

1 Java中的時間類型

java.sql包下給出三個與資料庫相關的日期時間類型,分別是:

l Date:表示日期,只有年月日,沒有時分秒。會丟失時間;

l Time:表示時間,只有時分秒,沒有年月日。會丟失日期;

l Timestamp:表示時間戳記,有年月日時分秒,以及毫秒。 

這三個類都是java.util.Date的子類。

 2 時間類型相互轉換

把資料庫的三種時間類型賦給java.util.Date,基本不用轉換,因為這是把子類對象給父類的引用,不需要轉換。

java.sql.Date date = …

java.util.Date d = date;

 

java.sql.Time time = …

java.util.Date d = time;

 

java.sql.Timestamp timestamp = …

java.util.Date d = timestamp; 

當需要把java.util.Date轉換成資料庫的三種時間類型時,這就不能直接賦值了,這需要使用資料庫三種時間類型的構造器。java.sql包下的Date、Time、TimeStamp三個類的構造器都需要一個long類型的參數,表示毫秒值。建立這三個類型的對象,只需要有毫秒值即可。我們知道java.util.Date有getTime()方法可以擷取毫秒值,那麼這個轉換也就不是什麼問題了。

java.utl.Date d = new java.util.Date();

java.sql.Date date = new java.sql.Date(d.getTime());//會丟失時分秒

Time time = new Time(d.getTime());//會丟失年月日

Timestamp timestamp = new Timestamp(d.getTime());

3 代碼

我們來建立一個dt表:

CREATE TABLE dt(

  d DATE,

  t TIME,

  ts TIMESTAMP

)

 

下面是向dt表中插入資料的代碼:

@Test

public void fun1() throws SQLException {

Connection con = JdbcUtils.getConnection();

String sql = "insert into dt value(?,?,?)";

PreparedStatement pstmt = con.prepareStatement(sql);

 

java.util.Date d = new java.util.Date();

pstmt.setDate(1, new java.sql.Date(d.getTime()));

pstmt.setTime(2, new Time(d.getTime()));

pstmt.setTimestamp(3, new Timestamp(d.getTime()));

pstmt.executeUpdate();

}

 

下面是從dt表中查詢資料的代碼:

@Test

public void fun2() throws SQLException {

Connection con = JdbcUtils.getConnection();

String sql = "select * from dt";

PreparedStatement pstmt = con.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();

 

rs.next();

java.util.Date d1 = rs.getDate(1);

java.util.Date d2 = rs.getTime(2);

java.util.Date d3 = rs.getTimestamp(3);

 

System.out.println(d1);

System.out.println(d2);

System.out.println(d3);

}

時間類型

資料庫類型與java中類型的對應關係:

DATE -> java.sql.Date

TIME -> java.sql.Time

TIMESTAMP -> java.sql.Timestamp

 

l 領域對象(domain)中的所有屬性不能出現java.sql包下的東西!即不能使用java.sql.Date;

l ResultSet#getDate()返回的是java.sql.Date()

l PreparedStatement#setDate(int, Date),其中第二個參數也是java.sql.Date

 

時間類型的轉換:

l java.util.Date -> java.sql.Date、Time、Timestamp

  • 把util的Date轉換成毫秒值
  • 使用毫秒值建立sql的Date、Time、Timestamp

  java.util.Date date = new java.util.Date();

  long l = date.getTime();//util的時間擷取毫秒值

  java.sql.Date sqlDate = new java.sql.Date(l);

l java.sql.Date、Time、Timestamp -> java.util.Date

  • 這一步不需要處理了:因為java.sql.Date是java.util.Date;

 

1 Java中的時間類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.