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中的常用日期类型
日期类型占用空间日期格式范围
DATETIME8字节yyyy-MM-dd HH:mm:ss1000-01-01 00:00:00~~9999-12-31 23:59:59
TIMESTAMP4字节yyyy-MM-dd HH:mm:ss1970-01-01 08:00:01~~2038年
DATE4字节yyyy-MM-dd1000-01-01~~9999-12-31
TIME3字节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 数据类型详解—日期型
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值