Oracle、MySQL與java的日期類型淺析

引言

我們經常使用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
  1. 在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());
    }
  1. 在一般框架中(如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");

參考博客

  1. oracle 數據類型詳解—日期型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章