记录一次日期类型字段的非空插入
1.情景展示
在实际开发过程中,经常会要与时间打交道。
有时候,日期类型字段在插入时间的时候需要非空。
如何进行妥善处理?
以oracle数据库进行举例说明。
2.具体分析
对日期类型的非空处理,有三种解决方式。
3.解决方案
方式一:为字段添加默认时间
第一步:为该字段添加默认系统时间;
第二步:将该字段设为非空(必须设置成为非空,否则默认值不生效)。
<insert id="insertWJ_CONSULT_INFO" parameterClass="map">
INSERT INTO WJ_CONSULT_INFO(ORG_CODE,ORG_NAME,PATIENT_TYPE,PATIENT_ID,TDEPTCODE,TDEPTNAME,DOCTORCODE,DOCTORNAME,DOCTORPHONE,CONSULT_DATE, APPLY_DATE)
VALUES(#ORG_CODE#,#ORG_NAME#,#PATIENT_TYPE#,#PATIENT_ID#,#TDEPTCODE#,#TDEPTNAME#,#DOCTORCODE#,#DOCTORNAME#,#DOCTORPHONE#,TO_DATE(#CONSULT_DATE#,'YYYY-MM-DD HH24:mi'), TO_DATE(#APPLY_DATE#, 'yyyy-MM-dd hh24:mi:ss'));
</insert>
注意:
必须将时间字段设置成非空状态。
因为,在java当中,此字段传参值为NULL,所以SQL在执行的时候,该值插入的就是NULL。
由于我们将字段设为了:可为空值,所以,Oracle最终并不会触发插入默认值的操作!!!
方式二:在java当中填值;
String APPLY_DATE = WebUtils.getParameter("APPLY_DATE");
if(null == APPLY_DATE || "".equals(APPLY_DATE) || "null".equals(APPLY_DATE)) {
APPLY_DATE = DateUtils.getSysdateStr("yyyy-MM-dd HH:mm:ss");
}
params.put("APPLY_DATE", APPLY_DATE);
方式三:在XML当中填值。
以ibatis为例
<insert id="insertWJ_CONSULT_INFO" parameterClass="map">
DECLARE V_APPLY_DATE DATE := TO_DATE(#APPLY_DATE#, 'yyyy-MM-dd hh24:mi:ss');
BEGIN
IF (V_APPLY_DATE IS NULL) THEN
V_APPLY_DATE := SYSDATE;
END IF;
INSERT INTO WJ_CONSULT_INFO(ORG_CODE,ORG_NAME,PATIENT_TYPE,PATIENT_ID,TDEPTCODE,TDEPTNAME,DOCTORCODE,DOCTORNAME,DOCTORPHONE,CONSULT_DATE, APPLY_DATE)
VALUES(#ORG_CODE#,#ORG_NAME#,#PATIENT_TYPE#,#PATIENT_ID#,#TDEPTCODE#,#TDEPTNAME#,#DOCTORCODE#,#DOCTORNAME#,#DOCTORPHONE#,TO_DATE(#CONSULT_DATE#,'YYYY-MM-DD HH24:mi'), V_APPLY_DATE);
END;
</insert>
说明:
在ibatis当中,无论是在<insert></insert><update></update><delete></delete>当中,我们除了可以进行上述对应的操作之外,还可以进行其它操作。
只不过是为了规范,需要在不同的标签执行增、删、改。
通过xml的方式将要执行的各种statement(statement、preparedStatemnt)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由ibatis框架执行sql并将结果映射成java对象并返回。
具体执行了什么,它并不管。
4.拓展
需要说明一点:
日期类型,虽然我们在插入SQL时,进行TO_DATE()进行日期类型转换时,如果在java当中,此字段内容为空,最终插入到表中时,该条数据,此字段的值也将为空,即:null。
不用担心时候否会报错的问题。
对于其它数据类型也一样,在insert的时候,只要不是非空字段,在声明插入,但却没值时,插入的内容都将为null或者空''。
-- Parameters: [null, 505823, 卫生院, 1, 5, , , , , , 2023-08-22 14:35, 505137, 人民医院, 1, , null, null, null, null, 0, null, null, null, null, null, null, 51692687088795, 61065825]
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/17649115.html