標籤: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中的時間類型