当前位置: 首页 > news >正文

MyBatis执行批量插入sqlserver报错:不允许从数据类型 varbinary 到 datetime2 的隐式转换

报错信息

不允许从数据类型 varbinary 到 datetime2 的隐式转换。请使用 CONVERT 函数来运行此查询。

问题描述

SpringBoot+MyBatis后台,使用的驱动版本为10.2.3.jre8,foreach标签批量插入,当datetime字段有值可以正常插入,如果null就会报错;单条插入时都没问题,就是一批量插入+带空值就报错。

这其实是sqlserver驱动的bug,升级驱动可解决,也可以不升级通过代码换种方式解决,具体解决办法请拉到最底下查看

代码结构

前端日期组件:

<el-date-picker
  style="width: 170px;"
  v-model="scope.row.productDate"
  type="datetime"
  value-format="x"
  placeholder="选择生产日期"
  @change="productDateChange(scope.row)"
/>

后端接收属性:

@Schema(description = "生产日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime productDate;

dao层

<insert id="saveBatch">
    INSERT INTO t_test(
        product_date
    )
    VALUES
    <foreach collection="list" item="item" separator=",">
        (
        #{item.productDate}
        )
    </foreach>
</insert>

解决办法

下面每一项都可以解决问题,不用都实现:
①在service层将日期转为字符串

item.setProductDateStr(DateUtils.format(item.getProductDate(), DateUtils.DATE_FORMAT_19));

②jdbc驱动maven依赖版本升级:12.8.1.jre8
③改为单条插入,for循环中一条一条insert,这种不太推荐,虽然解决问题,但是代码太不好

相关文章:

  • PowerBi 桑基图(SanKey)显示多节点的解决方法
  • 数据结构与算法基本概念
  • 使用大语言模型进行Python图表可视化
  • 【质量管理】质量的系统是预防,那以预防为主的质量管理系统包括什么?
  • 【QT】练习1
  • 里昂惕夫矩阵:投入产出分析
  • element-plus走马灯(el-carousel)不显示问题
  • 【数论3】裴属定理与扩展欧几里得算法
  • naive_admin项目实战03 基于Go语言的后端
  • LearnOpenGL小练习(QOpenGLWidget版本)
  • 【杂谈】-大型语言模型对具身人工智能发展的推动与挑战
  • Apache Hive和Snowflake的`CREATE VIEW`语法和功能特性整理的对比表
  • 移动端六大语言速记:第5部分 - 面向对象编程(OOP)
  • 翻译: 人工智能如何让世界变得更美好三
  • 深入解析HTTP请求方法:Spring Boot实战与最佳实践
  • 【LeetCode 热题100】208:实现 Trie (前缀树)(详细解析)(Go语言版)
  • leetcode 53.Maximum Subarray
  • Docker学习--容器生命周期管理相关命令--run命令
  • Linux内核网络栈:数据发送流程解析
  • 每日壁纸更新 pc
  • 深圳营销网站建设公司/360网站推广怎么做
  • 广州 骏域网站建设 陶瓷/墨子学院seo
  • 做英文简历的网站/搜狐财经峰会
  • 黑龙江建设培训网站/独立站seo
  • 如何免费建立网站/手机制作网页
  • 手机端网站怎么做seo/搜索引擎优化seo