首页 > 数据库 >民航电子数据库:表主键为自增,insert时报错:[E16005] 字段xxx不能取空值

民航电子数据库:表主键为自增,insert时报错:[E16005] 字段xxx不能取空值

时间:2024-04-09 09:58:18浏览次数:28  
标签:insert 自增 ID 空值 字段 SQLException E16005 主键 ###

目录


一、场景

1、对接民航电子数据库

2、表的主键为自增主键,使用mybatis封装好的insert方法新增记录时报错

在这里插入图片描述


二、报错信息

### Error updating database.  Cause: java.sql.SQLException: [E16005] 字段ID不能取空值 
### The error may involve com.xxx.mapper.base.power.SysPowerMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO t_sys_powertype ( ID,powerType,description,lastUpdateOper,lastUpdateDate,VDNID,isSynCti ) VALUES( ?,?,?,?,?,?,? ) 
### Cause: java.sql.SQLException: [E16005] 字段ID不能取空值 
; uncategorized SQLException; SQL state [cae16005]; error code [16005]; [E16005] 字段ID不能取空值 ; nested exception is java.sql.SQLException: [E16005] 字段ID不能取空值 
org.springframework.jdbc.UncategorizedSQLException: 
### Error updating database.  Cause: java.sql.SQLException: [E16005] 字段ID不能取空值 
### The error may involve com.xxx.mapper.base.power.SysPowerMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO t_sys_powertype ( ID,powerType,description,lastUpdateOper,lastUpdateDate,VDNID,isSynCti ) VALUES( ?,?,?,?,?,?,? ) 
### Cause: java.sql.SQLException: [E16005] 字段ID不能取空值 
; uncategorized SQLException; SQL state [cae16005]; error code [16005]; [E16005] 字段ID不能取空值 ; nested exception is java.sql.SQLException: [E16005] 字段ID不能取空值 

三、排查

1、认为是民航电子数据库需要手动声明该字段是自增主键,为字段添加@GeneratedValue主键(无效,依旧报错

在这里插入图片描述


2、认为是@Id注解导致,去除@Id无效,依旧报错),而且去除后会影响到mybatis自带的selectByPrimaryKeydeleteByPrimaryKeyuploadByPrimaryKey方法


3、将报错的SQL拿到民航电子数据库(CAE)的数据库管理工具CAEManager.exe执行,依旧会报错,该问题与代码无关

在这里插入图片描述


四、原因

民航电子数据库(CAE)本身语法的问题,只要在insert时带上了主键,就算是自增主键,也不能为null


五、解决

@Column注解设置insertable = false,表示该字段不参与insert

在这里插入图片描述


这样在调用mybatis封装好的insert方法时,SQL会去除ID字段

INSERT INTO t_sys_powertype ( ID,powerType,description,lastUpdateOper,lastUpdateDate,VDNID,isSynCti ) VALUES( ?,?,?,?,?,?,? ) 

变为

INSERT INTO t_sys_powertype ( powerType,description,lastUpdateOper,lastUpdateDate,VDNID,isSynCti ) VALUES( ?,?,?,?,?,? ) 

标签:insert,自增,ID,空值,字段,SQLException,E16005,主键,###
From: https://blog.csdn.net/weixin_52116015/article/details/137537730

相关文章

  • 36. 关于 SAP ABAP OData 服务如何实现 Deep Insert 场景 - SAP 应用的标准行为
    有朋友在知乎上向我咨询:OData更新多表数据的时候,可以做多层级结构的entity吗?多层的时候etag怎么做?比如我要更新表1.2.3。分别是header级别以及子层级别以及子层的子层。调用元调用一次会把三层的数据都给我们。如果put不可以做,一般odata这种怎么做。请赐教。......
  • 简易自增id生成器
    importjava.util.concurrent.*;importjava.util.concurrent.atomic.AtomicLong;importjava.util.function.Function;publicclassSeqManager{privatefinalSeqseq;privatefinalExecutorServicee=newThreadPoolExecutor(1,1,0L,Time......
  • 06 MySQL数据操作DML---插入insert、删除delete、更新update、查询select
    DML是指数据操作语言,用来对数据库中表的数据记录进行更新插入insert向表中指定字段插入数据insertinto表名(字段名1,字段名2,字段名3,...)values(字段名1值,字段名2值,字段名3值,...)INSERTintomy_student(id,`name`,age)values(2,'Jack',12);字段列表不一定非要......
  • KingbaseES 为什么select主键列不走索引
    背景有客户提出一个问题。一个类似这样的SQL语句,selectcount(id)from为什么执行计划用全表扫,不用索引。id列上有主键。分析test=#explain(analyze,buffers)selectcount(id)fromt1;QUERYPLAN---------------......
  • python 操作excel ,累加insert
      importosfromopenpyxl.reader.excelimportload_workbookimportpandasaspddefinsert(relist,one):#data=[{"pol":one['pol'],"pod":one["pod"],"gc_scac":z["group"],&quo......
  • ODBC批量merge中出现主键冲突的分析
    ODBC批量merge中出现主键冲突的分析一、文档概括客户某个merge语句运行时,发生主键冲突报错。经分析,其原因如下:由于merge语句中,ON里的判断条件(谓词)中存在带精度定义的数字字段,在绑定变量传递过程中,驱动将数值高精度数字传过去,而数据库内的数据已经做了精度限制,导致在......
  • 数据库中的约束纯干货——主键约束
    目录(一)特点:(二)添加主键约束2.1格式:2.2举例:......
  • Mysql(数据库)知识详解【4】~{索引,主键优化}
    记住满元素中间元素向上裂变就行了因为如果是5个节点,比第一个节点小的算一个指针,逼最后一个节点大的算一个指针,里面是4个指针所有元素都会出现在叶子节点并且诸多叶子节点通过指针构造一张单项链表看我:除了最下面节点,上面的节点(叶子空间最大16k)全部放满内存......
  • 【C++】自增运算符重载及其效率问题
    自增运算符重载总所周知,C++的自增运算符有两种基本使用方法,在这里我们分别称为i++和++i,想必大家在C语言课上已经学了自增运算符和自减运算符,这里就不再赘述,这里主要讲解自增运算符重载,自减运算符完全可以触类旁通。首先了解什么是运算符重载。定义:运算符重载是面向对象编......
  • 【C++】常用序列式容器迭代器自增效率实测
    常用序列式容器包括vector、list、deque。本篇文章就来评析它们的迭代器,不同自增方式效率的不同。在看这篇文章之前,大家可以先看看这篇文章:【C++】自增运算符重载及其效率问题-CSDN博客,了解一下之前得出的结果。前面的文章其中一个结论是,在自定义类型的自增(自减)运算符重载......