批量更新数据不成功

问题:

Excel导入用户数据,已有的用户信息更新不成功。

场景:导入用户数据时,数据库已存在的数据进行更新,不存在的新增,excel表中可存在相同手机号的用户信息,以最后一条为准更新用户信息。

分析:业务逻辑没有问题:

1先查询数据库,存在则更新用户信息,将新的用户信息存放到updateUserList列表

2不存在,再查询本地用户信息缓存(缓存excel中已有的用户信息),

2.1缓存中存在,更新用户信息,将修改的用户信息存放到updateUserList列表

2.2缓存中不存在,新增用户信息,将新增的用户信息存放到addUserList列表

执行到最后,查看updateUserList列表数据,重复的用户信息成功的存入到该列表中,没有问题。但执行更新后发现并没有将相同的用户信息的最后一条更新。同事帮忙查看后,分析可能sql问题。

Sql格式:case then when的形式批量更新,如果存在重复的2个用户id(手动生成),那么该语句永远只执行第一条数据,后面再多也不执行!

原文地址:https://www.cnblogs.com/cslj2013/p/9657968.html

时间: 2024-10-12 23:15:07

批量更新数据不成功的相关文章

批量更新数据不同状态时 ,1.在更新前检测 2.更新后执行自己的逻辑

今天在项目中做盘点管理,盘点单据有 编辑->提交->审批->撤销->退回->开盘->盘毕等状态.根据操作对盘点单据会不停的更新其状态.一般做法是根据这5.6种状态,编写5,6中ServiceImpl方法 分别去Update.若要是批量操作则会加上for循环,代码块冗余过多.自己便将Update抽离出来.抽离出来后,面临这一些问题.就是在有些状态更新操作时,需要做验证(如:退回只能操作审批状态.开盘只能操作审批状态).这个时候就需要在update之前需要判断,看其当前状态

mybatis学习之路----批量更新数据两种方法效率对比

原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方式有两种, 一种用for循环通过循环传过来的参数集合,循环出N条sql, 另一种 用mysql的case when 条件判断变相的进行批量更新 下面进行实现. 注意第一种方法要想成功,需要在db链接url后面带一个参数  &allowMultiQueries=true 即:  jdbc:mysql:

Sql语句批量更新数据(多表关联)

最近在项目中遇到一个问题,原来设计的功能是不需要一个特定的字段值depid的,但是新的功能需要根据depid来展现,于是出现了这样一个问题,新增加的数据都有正确的depid,而原来的大量的数据就没有depid或者说depid不是想要的,面临要批量更新原来数据depid的问题. 更新涉及到三个表base_cooperativeGroup,base_groupuser,base_user. 列出表结构: 1.base_cooperativeGroup 2.base_groupuser 3.base_

Mybatis批量更新数据

Mybatis批量更新数据 第一种方式 [html] view plain copy print? <update id="updateBatch" parameterType="Map"> update aa   set a=#{fptm}, b=#{csoftrain} where c in <foreach collection="cs" index="index" item="item&qu

度量快速开发平台:网格部件批量更新数据

在快速开发平台中,如何批量更新网格部件数据?今天给大家介绍平台下的2种方法: 方法一: 利用快速开发平台自身的智能向导,快速构建数据的批量更新功能. 批量更新数据函数:SetColumnValue(stringfiledName,objectvalue,intscope) 作用 获取焦点行的字段的值. 参数 参数一:fieldName      string类型,字段名称. 参数二:value     object类型,更新的值. 参数三:scope     int类型,更新的范围.     更

spring jdbcTemplate批量更新数据

方法:先实现BatchPreparedStatementSetter接口,然后再调用JdbcTemplate的batchUpdate(sql,setter)操作,参数sql是预编译语句 ,setter是BatchPreparedStatementSetter的一个实例.或者使用内部匿名类方式. BatchPreparedStatementSetter接口 public interface BatchPreparedStatementSetter{ public int getBatchSize(

采用存储过程的方式批量更新数据

采用存储过程的方式批量更新数据,Oracle中也可采用merge-update的方式更新,不过采用如下存储过程的方式会更快些 DECLARE   MAX_ROWS            NUMBER DEFAULT 5000;   ROW_ID_TABLE        DBMS_SQL.UROWID_TABLE;   DATE_TIME_TABLE      DBMS_SQL.DATE_TABLE;   CURSOR C1 IS     SELECT /*+ use_hash(t1,t2) p

Neo4j 第五篇:批量更新数据

相比图形数据的查询,Neo4j更新图形数据的速度较慢,通常情况下,Neo4j更新数据的工作流程是:每次数据更新都会执行一次数据库连接,打开一个事务,在事务中更新数据.当数据量非常大时,这种做法非常耗时,大多数时间耗费在连接数据库和打开事务上,高效的做法是利用Neo4j提供的参数(Parameter)机制和UNWIND子句:在一次数据更新中,进行一次连接,打开一次事务,批量更新数据:参数用于提供列表格式的数据,UNWIND子句是把列表数据展开成一行一行的数据,每行数据都会执行结构相同的Cypher

使用PHP生成器批量更新数据

使用PDO操作数据 生成器使用 随机暂停缓解数据库压力 批量更新数据 <?php header('Content-Type: text/html; charset=utf-8'); // 定义数据配置信息 $host = ''; $dbname = ''; $user = ''; $pass = ''; $prefix = ''; try { // 是否开启更新执行 define('DEBUG',true); // true 执行修改SQL false 反之, $testFor = 0; $te