引言
我們經常使用java程序,把日期數據存儲到數據庫(如Oracle、MySQL)中,或者直接在數據庫中插入日期數據,但經常遇到類型、格式轉換等錯誤。此文記錄插入日期的常用用法。
1.Oracle
1.1 Oracle中常用的日期類型
1.1.1 DATE
- Oracle中最常用的日期類型,它可以保存日期和時間
- date表示的日期範圍可以是公元前4712年1月1日至公元9999年12月31日
- date類型在數據庫中的存儲固定爲7個字節,每個字節分別用來存儲世紀,年,月,日,時,分,秒
1.1.2 TIMESTAMP
- 也是Oracle常用的日期類型,它與date的區別是不僅可以保存日期和時間,還能保存小數秒,小數位數可以指定爲0-9,默認爲6位,所以最高精度可以到ns(納秒),數據庫內部用7或者11個字節存儲,如果精度爲0,則用7字節存儲,與date類型功能相同,如果精度大於0則用11字節存儲。
1.2 存儲數據到oracle
1.2.1 java存儲數據到oracle
- 在jdbc中,我們需要把java.util.Date類型轉換爲java.sql.Date,然後存儲到數據庫。(如果數據是字符串則需先轉爲java.util.Date)
注意:java.util.Date轉java.sql.Date會丟失時分秒精度。可以通過轉爲java.sql.Timestamp或直接使用to_date(“字符串”)作爲插入數據庫的日期數據解決
//字符串轉java.util.date
public java.util.Date getDate(String str) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date result = null;
try {
result = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
//java.util.Date轉爲java.sql.Date
public java.sql.Date getSqlDate(java.util.Date date){
return new java.sql.Date(date.getTime());
}
- 在一般框架中(如MyBatis),則只需要傳入java.util.Date即可
1.2.2 在oracle中直接存儲日期數據
需要使用to_date()去轉換字符串
-- 注意:oracle數據庫中MM和mm都是月份,mi才表示分鐘,hh24和hh分別表示24小時制和12小時制
insert into test_date values(to_date('1998/11/11 13:13:13','yyyy/MM/dd hh24:mi:ss'));
insert into test_date values(to_date('1998/11/11 01:13:13','yyyy/MM/dd hh:mi:ss'));
2. MySQL
2.1 MySQL中的常用日期類型
日期類型 | 佔用空間 | 日期格式 | 範圍 |
---|---|---|---|
DATETIME | 8字節 | yyyy-MM-dd HH:mm:ss | 1000-01-01 00:00:00~~9999-12-31 23:59:59 |
TIMESTAMP | 4字節 | yyyy-MM-dd HH:mm:ss | 1970-01-01 08:00:01~~2038年 |
DATE | 4字節 | yyyy-MM-dd | 1000-01-01~~9999-12-31 |
TIME | 3字節 | HH:mm:ss | -838:59:59~~838:59:59 |
2.2 存儲數據到MySQL
2.2.1 java存儲數據到MySQL
常用的類型是date和datetime。對於date,只接收年月日,所以要求時分秒精度的話,一般使用datetime。
如何存儲---->程序同oracle,只需修改數據源信息(數據庫配置信息)即可。
2.2.2 在mysql中直接存儲日期數據
可以直接插入字符串
insert into test_date values("2220-02-02 12:12:12");