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

开发避坑指南(20) :MyBatis操作Oracle插入NULL值异常“无效列类型1111“解决方案

错误信息

[ERROR] - org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: 
Could not set parameters for mapping: ParameterMapping{property='orderNo', mode=IN, javaType=class java.lang.String, jdbcType=null, 
numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: 
Error setting null for parameter #4 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull 
configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111

错误背景

使用mybatis的insert()方法插入Null值到oracle数据库时报错。

错误分析

从错误信息看,受影响的参数是第4个,相关报错的字段是orderNo,该字段的类型是字符串类型java.lang.String,而当前配置的类型是jdbcType=null。与MySQL不同,Oracle对NULL值的类型校验更严格,当MyBatis向Oracle插入NULL值时,默认会尝试使用JdbcType.OTHER类型,而Oracle驱动无法识别该类型,导致报错"无效的列类型: 1111"。

解决办法

将insert()方法修改为insertSelective(),仅插入非NULL字段值,自动忽略NULL值字段,避免数据库默认值被覆盖。

其他方案

(1)如果是xml中自定的插入语句,需要在XML映射文件指定jdbcType,比如:

<!-- 在参数占位符中显式声明jdbcType -->
<insert id="insertData">INSERT INTO table_name (column1, column2) VALUES (#{param1,jdbcType=VARCHAR}, #{param2,jdbcType=NUMERIC})
</insert>

(2)全局配置jdbcTypeForNull,如

<!-- mybatis-config.xml中配置 -->
<settings><setting name="jdbcTypeForNull" value="NULL"/>
</settings>

(3)MyBatis-Plus配置,如

# application.yml配置
mybatis-plus:configuration:jdbc-type-for-null: 'null'
http://www.lryc.cn/news/613451.html

相关文章:

  • DrissionPage实战案例:小红书旅游数据爬取
  • TDengine IDMP 文档介绍
  • 腾讯位置服务 —— 预估订单路线金额(使用Drools规则引擎处理)
  • 机器学习在量化中的应用:如何从逻辑回归到XGBoost实现高效预测?
  • [Oracle] DECODE()函数
  • DBeaver 25.1.0 转储数据库失败解决方案(适配最新版界面)
  • [Oracle] GREATEST()函数
  • 数据库入门:从零开始构建你的第一个数据库
  • 一个基于固定 IP地址查询天气的 C 语言程序,通过调用第三方天气 API:
  • Oracle 关闭 impdp任务
  • Oracle 12c + Pl/Sql windows系统下表空间创建、迁移,dmp备份导入,数据库字符集更改
  • 图论(1):图数据结构
  • 攻防世界WEB(新手模式)2-2-upload1
  • 【YOLO学习笔记】YOLOv8详解解读
  • 工业相机使用 YOLOv8深度学习模型 及 OpenCV 实现目标检测简单介绍
  • Moses工具的配置和小语种平行语料训练SMT完整实现
  • 商城小程序怎么做?如何开发母婴用品商城小程序?
  • 前端三大核心要素以及前后端通讯
  • mysql_mcp_server_pro源码部署及启动报错新手指南:让智能体长出手来直接获取到最底层的数据
  • Linux ISCSI服务配置
  • 聚集索引VS非聚集索引:核心差异详解
  • 将Excel数据导入SQL Server数据库,并更新源表数据
  • 安卓Handler和Looper的学习记录
  • ArkTS: McPointChart
  • Debian系统 为账号添加sudo权限
  • 远程制作《最后生还者》中的Xsens动作捕捉技术
  • Maven分模块开发实战指南
  • Windows下安装SageAttention
  • 【CodeButty + 自制MCP】给AI装上翅膀,快速绘制思维导图
  • javaweb开发之会话_过滤器_监听器