关于数据库中decimal类型数据没有默认值时的数据插入问题


        insert into t_dept_activity(
        ID,
        DEPT_ID,
        ACTIVITY_NAME,
        ACTIVITY_DESCRIPTION,
        ACTIVITY_START_TIME,
        ACTIVITY_END_TIME,
        MATCH_RULE_TYPE,
        VICTORY_COUNTS,
        GOODS_COUNTS,
        GOODS_ID,
        EXCHANGE_DEADLINE,
        ENTRY_FEE,
        ACTIVITY_STATUS,
        CREATE_BY,
        remark,
        CREATE_TIME,
        DELETE_FLG
        )values(
        #{id},
        #{deptId},
        #{activityName},
        #{activityDescription},
        #{activityStartTime},
        #{activityEndTime},
        #{matchRuleType},
        #{victoryCounts},
        #{goodsCounts},
        #{goodsId},
        #{exchangeDeadline},
        #{entryFee},
        #{activityStatus},
        #{createBy},
        #{remark},
        sysdate(),0
        )
    

       先贴代码,此时因为数据库中 ENTRY_FEE 字段没有默认值,当页面传入0时,会报"entryFee  don't have a default value"的错误,而直接运行插入sql是可以正常插入的,这是因为mybatis在存储Integer、Bigdecimal等数据类型时,会将0解析成null,结果在存储的时候就报错了。

      有两种解决方法:

             1. 给数据库的integer和decimal数据类型的字段设置默认值。

             2. 去掉entryFee(integer/Bigdecimal)的判空条件,即#{entryFee},                     改为#{entryFee},即可。

其实仔细查看代码会发现,在Bigdecimal类型数据做插入操作时,页面是0,它的inval的值是null。做查询时,DB中的值为0时,java代码中的intval的值为null。 

你可能感兴趣的:(编码问题)