数据库varchar存储时间在Mybatis转Date时可能的坑

背景
数据库里用varchar存储的日期数据,有的是null,有的是空值,有的是正常数据。java类里用Date接收,在mybatis转化后报了异常:

Error attempting to get column 'stage4StartTime' from result set.  Cause: java.sql.SQLDataException: Unsupported conversion from LONG to java.sql.Timestamp
; Unsupported conversion from LONG to java.sql.Timestamp; nested exception is java.sql.SQLDataException: Unsupported conversion from LONG to java.sql.Timestamp
org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'stage4StartTime' from result set.  Cause: java.sql.SQLDataException: Unsupported conversion from LONG to java.sql.Timestamp

解决思路
利用cast函数处理,这样空值会变成null就不会报转换异常了,例如:
cast(stage4sjrq as date) as stage4StartTime
(其中数据库字段stage4sjrq为varchar类型,java中stage4StartTime字段为Date类型)

贴上sql示例

select 		
    syjhbh as number,
    syjhmc as name,
    cast(stage1sjrq as date) as createTime,
    khqc as clientName,
    syjhszbm as buName,
    ywxbianma as businessLine,
    sjzhuangt as businessStatus,
-- 数据库里可能有null和空值,varchar的空值在转换成java类的Date类型时会报转换错误,
-- 但是用cast函数以后,空值会变成null,就不会报错
    cast(modedatamodifydatetime as date) as updateTime,
    cast(stage1sjrq as date) as stage1StartTime,
    cast(stage2sjrq as date) as stage2StartTime,
    cast(stage3sjrq as date) as stage3StartTime,
    cast(stage4sjrq as date) as stage4StartTime,
    cast(stage5sjrq as date) as stage5StartTime,
    cast(stage6sjrq as date) as stage6StartTime
from uf_sjgl ```

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值