幾年沒有做過mysql的jdbc編碼和數據庫表設計的工作了,結果剛剛一上手,測試的時候發現都是問題,我這里指的是對應時間字段的設計問題,一般我們都要求時間字段保存到秒,故舍棄了mysql的date類型字段,選擇了timestamp類型字段,并且還有一個字段是create_time,默認值是CURRENT_TIMESTAMP 。
字段類型定義:create_time timestamp default CURRENT_TIMESTAMP comment '創建時間,格式為日期',
表結構定義:
/*==============================================================*//* Table: task_detail *//*==============================================================*/create table task_detail( id int not null auto_increment comment '主鍵', taskName varchar(200) comment '任務名稱', start_time timestamp comment '開始時間', end_time timestamp comment '結束時間', task_start_time timestamp comment '任務開始時間', task_end_time timestamp comment '任務結束時間', cost_timesecond int comment '消耗時間,單位為秒', create_time timestamp default CURRENT_TIMESTAMP comment '創建時間,格式為日期', primary key (id));alter table task_detail comment 'Task執行明細表';
結果在進行jdbc保存數據的時候,對于設置為空的字段都進行了默認值的插入。
這塊可能沒有表述清楚,假設我們需要將end_time設置為空,即通過prepareStatement插入
stmt.setTimestamp(3,null) 這條語句后,其不是空值,而是與
create_time
這樣與我實際想要存儲的數據發生了錯誤,故一直在檢查問題原因所在。
MySQl中有多種表示日期和時間的數據類型。其中YEAR表示年份,DATE表示日期,TIME表示時間,DATETIME和TIMESTAMP表示日期和實踐。它們的對比如下:
TEAR ,字節數為1,取值范圍為“1901——2155”
DATE,字節數為4,取值范圍為“1000-01-01——9999-12-31”
TIME,字節數為3,取值范圍為“-838:59:59——838:59:59”
DATETIME,字節數為8,取值范圍為“1000-01-01 00:00:00——9999-12-31 23:59:59”
TIMESTAMP,字節數為4,取值范圍為“19700101080001——20380119111407”
當把數據表結構修改成如下,在存儲數據時就一切正常了。
/*==============================================================*//* Table: task_detail *//*==============================================================*/create table task_detail( id int not null auto_increment comment '主鍵', taskName varchar(200) comment '任務名稱', start_time datetime comment '開始時間', end_time datetime comment '結束時間', task_start_time datetime comment '任務開始時間', task_end_time datetime comment '任務結束時間', cost_timesecond int comment '消耗時間,單位為秒', create_time timestamp default CURRENT_TIMESTAMP comment '創建時間,格式為日期', primary key (id));alter table task_detail comment 'Task執行明細表';
timestamp
類型的,且設置了default值。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com