mysql 表 Date類型

舉個例子給你吧,mysql的 datetime字段

有表:

CREATE TABLE `u_user` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`nickname` varchar(32) DEFAULT NULL,

`addtime` datetime?DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入的話

INSERT INTO u_user (nickname,ADDTIME) VALUES('小明','2017-09-29 08:59:59');

INSERT INTO u_user (nickname,ADDTIME) VALUES('小軍','20170930');

這樣寫都可以 的插入。

可以查到資料:

MySQL 以:

‘YYYY-MM-DD HH:MM:SS’

格式檢索與顯示 DATETIME?類型。支持的范圍是:

‘1000-01-01 00:00:00’

‘9999-12-31 23:59:59’。



MySQL(版本:5.1.50)的時間日期類型如下:

datetime 8bytes xxxx-xx-xx xx:xx:xx 1000-01-01 00:00:00到9999-12-31 23:59:59 timestamp 4bytes xxxx-xx-xx xx:xx:xx 1970-01-01 00:00:01到2038 date 3bytes xxxx-xx-xx 1000-01-01到9999-12-31 year 1bytes xxxx 1901到2155 time 3bytes xx:xx:xx -838:59:59到838:59:59(為了滿足時間的加減運算)

Java(1.6) 中能保存時間日期類型的類主要有

java.util.Date

java.util.Calendar

java.sql.Date

java.sql.Time

java.sql.Timestam

以前從mysql中查詢出來的時間日期類型,都放在java.util.Date類型里面了。這樣帶來一系列的問題,首先這個類提供的時間操作函數太少,一般都需要轉換成java.util.Calendar再去操作;其次即使使用了java.util.Calendar,也不是很方便,一個很簡單的想法,需要寫很多代碼才能實現;java.util.Date的數據內容為xxxx-xx-xx xx:xx:xx,有時候不需要時間,只需要日期。從數據庫中取值出來的日期類型放到這個類中的時候,會在時間位自動補上當前時間。這使得本來兩個日期在數據庫中是相等的,取出來放到這個類得時候就不再相等了,需要去考慮時間上的誤差,很是頭疼。

java提供與mysql方便交互的三種數據類型

java.sql.Date

java.sql.Time

java.sql.Timestam

它們都是繼承java.util.Date,算是對該類的精簡,很適合跟數據庫交互。

===========java注入數據庫==========

java類型 ? mysql類型 ? ? ? ?成功與否 date ? ? ? ? date ? ? ? ? ? ? ? yes date ? ? ? ? time ? ? ? ? ? ? ? no date ? ? ? ? timestamp ? ? ? no date ? ? ? ? datetime ? ? ? ? no time ? ? ? ? date ? ? ? ? ? ? ? no time ? ? ? ? time ? ? ? ? ? ? ? yes time ? ? ? ? timestamp ? ? ? no time ? ? ? ? datetime ? ? ? ? no timestamp date ? ? ? ? ? ? ?yes timestamp time ? ? ? ? ? ? ?yes timestamp timestamp ? ? yes timestamp datetime ? ? ? ?yes ==========end java注入數據庫======== 總規律,如果A完全包含B,則A可以向B注入數據,否則報錯

==========從數據庫提取到java ==========

mysql類型 ? ?java類型 ? ? 成與否 date ? ? ? ? ? ? date ? ? ? ? yes date ? ? ? ? ? ? time ? ? ? ? yes --------------缺少的部分使用歷元 date ? ? ? ? ? timestamp ? yes --------------缺少的部分使用歷元 ? time ? ? ? ? ? date ? ? ? ? ? yes --------------缺少的部分使用歷元 time ? ? ? ? ? time ? ? ? ? ? yes time ? ? ? ? ?timestamp ? ?yes --------------缺少的部分使用歷元 timestamp date ? ? ? ? ? yes timestamp time ? ? ? ? ? yes timestamp timestamp ? yes datetime ? ? ?date ? ? ? ? yes datetime ? ? ?time ? ? ? ? yes datetime ? ?timestamp ? yes ==========end 從數據庫提取到java======= 不會出錯,缺少的部分使用歷元,而不是當前日期時間

ull to db(null) =====> 也是null ? null to db(not null)=======> 數據庫報錯 db(null) to java==========> 如果單字段出來,則整個entity都是null,如果帶著其他不是null的字段出來,則可以實例化entity,本身字段依然是null db(not null) to java==========> 如果包含日期,則報錯,否則為000 最優解決方案,定義成可以為null java.sql時間系統的運算系列 after,before compareTo原小于參數返回<0,等于返回=0,大于返回>0 優點:于數據庫同類型,可以方便傳輸(無論是從DB到src還是反方向),方便比較大小 缺點:缺少運算單元,不適合時間跳躍的運算和間隔的運算 總結:calendar具有強大的跳躍運算和間隔運算能力,在需要的時候,可以將sql系列的時間轉成calendar。 先設置calendar為歷元,然后從sql系列時間中轉換,最后再轉回sql系列時間。 calendar只用于時間有跳躍的轉換,對比運算統一使用sql系統,這樣代碼將更清晰

date 和 calendar怎么初始化為格林威治時間 new date(0) calendar.setTimeInMillis(0) sql系列時間 static valueOf new XX(0)獲得歷元 new XX(year+1900, month+1,day,hour,minute,second,nano)已過時,創建也沒錯 toString或者SimpleDateFormat

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容