导入批量数据一次查询将数据的编码重复的查出来

MySQL批量插入,如何判断重复 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。需要把其他库或者Excel中的数据批量导入到指定库中,业务中需要判断是否为重复数据,但是大量数据录入时判断是否重复,如何实现?创建测试表插入时检索主键列表,如存在相同主键记录,不更改原纪录,只插入新的记录。ignore关键字所修饰的SQL语句执行后,在遇到主键冲突时会返回一个0,代表并没有插入此条数据。 阅读详情

导入批量数据将数据分组

在导入数据操作中,我们通常会计入日志,有必要的话还会显示在前台告知导入者共计导入或新增或更新了多少
条数据,而在此之前我们根据导入数据的编码来查询数据库的本来存不存在,再来匹配数据是更新还是新增,一般我们新手做法是用一个for循环去查询,这样是可以解决问题,但这样查一次就会连接一次数据库,对其性能损耗很大,所以一次查询出结果是很有必要的.

我这是被安排的任务是完成批量导入数据功能能,但导入的数据如果有编码重复的,就在前台给用户选择哪些是要覆盖的,哪些不导入.这里的重点就是”查一次”.

流程图

Created with Raphaël 2.1.0解析上传文件得到所有数据,创建HashMap得到allList(全部数据)查询sql得到codeExistList(编码存在的数据)匹配操作(两个集合的code是否相等)添加入可更新组(将查到数据的id赋给解析后的数据)存入HashMap,存入session,将编码重复数据传回前台执行导入操作(导入数据有id的为更新)添加入可新增组yesno

哈哈,第一次用MarkDown,强行给自己加戏,见谅!鞠躬!好了接下来是重点!

一次查询全部数据的sql

其实就是in

select * from 表 where code in(item1.code,item2.code,…);

但是!数据库查询里in函数里只最多有999个元素,所以传过来的List参数需要进行处理:
splitList ()方法可以直接拿过去;


@Override
    public List <ReportDisplayInfo> checkCodeIsRepetition (List <ReportDisplayInfo> reportDisplayinfoCodes)
    {
        List <ReportDisplayInfo> result = new ArrayList <ReportDisplayInfo> ();
        List <List <ReportDisplayInfo>> checkCodeIsRepetitionList = new ArrayList <List <ReportDisplayInfo>> ();
        // 数据库的in函数最大能处理999的长度
        checkCodeIsRepetitionList = splitList (reportDisplayinfoCodes, Integer.valueOf (999));
        result = _displayInfoMapper.checkCodeIsRepetition (checkCodeIsRepetitionList);
        return result;
    }

    public static <E> List <List <E>> splitList (List <E> targetList, Integer splitSize)
    {
        if (targetList == null)
            return null;
        Integer size = targetList.size ();
        List <List <E>> resultList = new ArrayList <List <E>> ();
        if (size <= splitSize)
        {
            resultList.add (targetList);
        }
        else
        {
            for (int i = 0; i < size; i += splitSize)
            {
                // 用于限制最后一部分size小于splitSize的list
                Integer limit = i + splitSize;
                if (limit > size)
                {
                    limit = size;
                }
                resultList.add (targetList.subList (i, limit));
            }
        }
        return resultList;
 }

接口方法及mapper文件中的sql

@Param注解请务必加上,不加框架不认识它

 public List <ReportDisplayInfo> checkCodeIsRepetition (@Param ("reportDisplayinfoCodes") List <List <ReportDisplayInfo>> reportDisplayinfoCodes);

由于对参数做了处理变成List <List <E>>类型,所以这变成了双重foreach循环

<select id="checkCodeIsRepetition" resultType="ReportDisplayInfo" parameterType="java.util.List">
        select <include refid="reportDisplayInfo" />
        from BR_ReportDisplayInfo  
        where REPORTDISPALYCODE in 
            <foreach collection="reportDisplayinfoCodes" index="index" item="codeList" separator=" OR REPORTDISPALYCODE IN " >  
                <foreach collection="codeList" index="index" item="info" open="(" separator="," close=")">  
                     #{info.displayCode}  
                </foreach>   
            </foreach>  
    </select>

分组

//allImportData是解析出来的全部数据,temp是数据库中的存在和本次解析数据的code相同的数据
temp = _reportDisplayInfoService.checkCodeIsRepetition (allImportData);
if (CollectionUtils.isNotEmpty (temp))
                {
                    reportDisplayInfoOKButCode = true;
                    // 筛选出可新增数据(分组[可增加数据,选择更新的数据])
                    for (ReportDisplayInfo reportDisplayInfo : allImportData)
                    {
                        int index = 0;
                        for (ReportDisplayInfo reportDisplayInfo2 : temp)
                        {
                            //code匹配上的,加上id属性,以后记日志时可以以此为条件判断它是新增还是更新
                            if (reportDisplayInfo.getDisplayCode ().equals (reportDisplayInfo2.getDisplayCode ()))
                            {
                                reportDisplayInfo.setId (reportDisplayInfo2.getId ());
                                codeRepetitiveData.add (reportDisplayInfo);
                                break;
                            }
                            else
                            {
                                index++;
                                if (index == temp.size ())
                                {
                                    normalData.add (reportDisplayInfo);
                                }
                            }
                        }
                    }
                }
                else
                {
                    normalData.addAll (allImportData);
                }
ElasticSearch批量导入的优化实践 最近在做es跨集群批量导入的优化工作,将自己get到的点总结一下。 跨集群导入有三种方法: 1,应用编程,从源集群读取,导入目标集群;这种方法的优点在于,整个导入过程的各个环节是自己编码控制的,每个环节都能做到可控,哪里有问题就可以针对性修改代码进行调优。正所谓哪里有问题点哪里。并且导出和导入是同时进行的,可以将导入程序部署在第三台机器上,充分利用各节点机器资源。但同时优点也是缺点,就是各个环... 阅读详情

相关推荐

Java实现Excel批量导入数据

主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

查询数据库中的重复数据记录

SELECT a.*, dlookup("r1","表2","id=" & a.id & " and name='"& a.name & "'") AS r1, dlookup("r2","表2","id=" & a.id & " and name='"& a.name & "'") AS r2。有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

wanghost的专栏 8921

西门子1200与FANUC机器人Profinet通讯

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 PLC项目已经归档,只需要恢复就可以看到。对应Profinet通讯的GSD文件也都在博文最后有连接 机器人柜子:R-30IB Mate 机器人主体:M-10IA 12 一、硬件介绍 机器人Profinet I/O通讯板卡:...

七兔自习室 2万+

java新增或修改时,判断数据是否已经存在或重复了

【代码】java新增或修改时,判断数据是否已经存在或重复了。

weixin_45559862的博客 605

virtuoso--DFF

27-实验课-std_cell2

qq_61440044的博客 2007

【FOC无刷电机控制】六步换向、FOC,STM32cubemx从零开始搭建BLDC六步换相代码、FOC代码(基于霍尔传感器)

FOC、六步换相,无刷电机控制

xifan的博客 3万+

Excel表格导入数据库进行判断是否有相同的数据

Excel表格导入数据库进行判断是否有相同的数据 这个问题困惑了我1天的时间,终于解决了这个问题。这个问题说复杂也不复杂,说简单也不简单。 我先说一下我的业务需求。 我们大家都知道,数据库对应的实体类一般情况下是数据库的全部字段,往往导入的excel表格数据仅仅是某一些字段属性,这也是复杂点之一。 前端进行选择添加导入和覆盖导入两种情况,我分别设置了type类型分别为0和1,0的话就是添加导入人员,1的话就是覆盖导入人员,把之前的人员删除后重新添加。 其次是要进行判断导入的人员名字不能重复。 首先判断exc

KevinJee_ 3745

对于基本的捕鱼游戏设计思路(五)——鱼

今天讲捕鱼游戏里鱼的部分,也是比较关键的一部分。 一步一步来,先分析游戏,首先鱼是从屏幕外生成,然后它有个移动的动作,而且分为不同的类型。 然后就可以进入代码部分,首先设置一个计时器,控制时间生成鱼,而鱼分种类,所以就用到随机函数,随机输出一个值,传入switch语句,从而生成不同的鱼。 void GameScene::xiaoyuupdate(float dt){ Size visibl

Cineze的博客 1万+

用Thinkphp上传导入csv文件并去除重复数据

        随着二胎政策的放开,中国的人口又一增高,数据也越来越多,那么数据的处理就尤为重要,在数据库中一条一条的添加很繁琐,批量的导入数据就显得很方便,导入并导入时,要记得编码格式要注意!那么实现此功能的思路大致如下:(附图) 先搭建好上传的界面 通过点击上传按钮,将所上传的表选中 再进行导入数据读取依次将读取的数据存入数据库( 将数据进行筛选)最后导入完毕下载日志文件供需要的用户     ...

小白白的博客 1307

ZYNQ Linux环境下PS端I2C驱动OV5640摄像头全流程解析

本文详细解析了在ZYNQ Linux环境下,通过PS端I2C驱动OV5640摄像头的完整流程。内容涵盖从Vivado硬件配置、PetaLinux系统构建、设备树节点添加,到用户空间I2C编程与寄存器配置实战,并提供了关键的调试技巧与常见问题排查方法,帮助开发者快速实现嵌入式视觉应用的传感器配置。

vulkan6gpu的博客 853

计算机视觉-全景图像拼接中的特征匹配与优化策略

本文深入探讨了计算机视觉中全景图像拼接的核心技术,重点解析了特征匹配后的关键优化策略。通过SIFT特征提取、RANSAC算法剔除误匹配,并结合APAP算法应对视差与鬼影问题,详细阐述了从基础对齐到无缝融合的完整流程,为开发者实现高质量全景拼接提供了实用指南。

weixin_29039773的博客 361

Sql 查询一个表中的重复数据

首先有一个字典表,里面有唯一主键id,编码drgs_code,年份year,有效性is_valid等关联条件因为有重复数据,所以导致关联时界面显示重复数据 第一次先通过编码drgs_code,年份year,有效性is_valid(1是有效的)分组查询: select dzd.drgs_code, dzd.year, dzd.is_valid from dw_zd_year...

优快云_admin_的博客 3220

Ubuntu20.04运行Vins-fusion

因已安装ROS noetic,eigen,opencv及ceres等库,这部分环境配置就不细讲,直接下载VINS-FUSION的代码库 下载编译 cd ~/vins-fusion/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git cd ../ catkin_make source ~/catkin_ws/devel/setup.bash 编译时会发现一堆错误,别急,无非就是环境冲突问题,一个个解决 1)首先,ROS

xiaojinger_123的博客 1万+

ypid编码是什么_重复ypid查询,重复记录查询,准确

SELECT fangjianhao, xiaoshouzhuangtai, dingjiadanjiaFROM S_fangyuanxinxi aWHERE (loupanmingcheng = '陶然庭苑小区') AND((SELECT COUNT(*)FROM S_fangyuanxinxiWHERE fangjianhao = a.fangjianhao AND loupanmingche...

weixin_34734156的博客 4689

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

weixin_45735391的博客 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Mysql查询某字段值重复的数据个数

Mysql查询某字段值重复的数据个数 表结构如下 CREATE TABLE `ams_ck` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `goods_name` varchar(30) NOT NULL COMMENT '资产名称', `goods_code` varchar(36) NOT NULL COMMENT '资产...

托塔天王的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

DBeaver数据导入实战指南:从CSV格式错误到批量导入跑稳

导入进行到第3万行时卡住,任务窗口反复刷同一行号,报错提示某个值无法转换为目标列类型。这是DBeaver数据导入失败最常见的形态。本文以CSV导入为主线,讲清楚数据在导入管线里怎么流动、四类典型故障各怎么对症处理,读完你能在导入失败时快速定位卡在哪一步,并把大批量导入跑稳。 ## 先看懂数据是怎么流的 导入的入口是右键目标表选择"导入数据",背后由数据转移模块 [plugins/org.jki

gitblog_00073的博客 871

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java生成有规律不重复的随机编码

1、需求生成有规律不重复的随机编码 2、解决随机生成不重复编码问题 3、编码如下: /* @param maxOrderno // 从数据库查询出的最大编号 */ public static synchronized List getEncode(String maxOrderno,int count) { String Ord

在努力工作的... 8826

MySQL 通过子查询批量插入数据

1 需求 需要将 a 表的数据插入 b 表,其中 a 表的数据很多是冗余的,是原始的多级分类数据,b 表相当于是对 a 表的简化,去掉冗余的数据,两表的 pdm 如下图: 2 方法 将 a 表的各级编码、名称无重复的插入 b 表,并设置对应的级别, 通过子查询批量插入无重复数据的SQL如下: INSERT into category_b (id, name, level) select D...

zhouxukun123的专栏 1万+

百万级数据导入实战:用EasyExcel和JDBC批量插入征服Excel海量数据

用EasyExcel和JDBC批量插入征服Excel海量数据

weixin_53216033的博客 1836

Dify中批量导入数据集技巧:提升RAG准备效率

通过Dify的批量导入功能,企业可高效完成文档解析、清洗、分块、向量化与索引构建,显著提升RAG系统的知识准备效率。结合自动化脚本与元数据标注,实现高质量、可持续的知识库管理,降低AI应用落地门槛。

weixin_42173218的博客 759

【踩坑】记录几个踩坑经过,升级框架,for update和批量导入

最后看源码发现原因是28版本解析address的时候,多解析一个斜杆,在com.dtflys.forest.http.ForestURL#toURLString 方法里多拼接了一个斜杆。forest是一个轻量级的http请求框架,有一天闲来无事看到idea的升级依赖功能就随便点了几个,将其升级到1.5.28版本。最后分析可能是主从同步延迟的原因,批量写主表, 从表即刻查询到一部分还未同步到的数据当作需要处理的返回, 导致重复插入。最后出现了重复的序列编码,甚至数据库出现重复的序列记录。

zzzgd_666的博客 1174

用EXCEL查询 SQL SERVER 数据库 U8 876的现存量。有重复的用黄色标记。

年纪大了。发现知识是用来分享的。整天的在网上爬别人的经验。现在也希望能为这个网络留下一点自己的经验。先把EXCEL查询SQL SERVER 数据库的代码黏贴出来。当然,本人的方法并不是最好的,还有很多需要改进的地方。只为还在学习的同学一起学习交流而分享。代码都有注释,应该比较好看的懂。代码送上。 [html] view plain copy Publ

zuiliannvshen的博客 1180

DBeaver批量数据导入导出与ETL处理最佳实践

DBeaver作为一款功能强大的开源数据库管理工具,不仅提供基础的SQL编辑和查询功能,更在数据迁移和ETL(Extract-Transform-Load)处理方面表现出色。本文将深入探讨DBeaver在批量数据处理方面的最佳实践,帮助开发者高效完成数据迁移、转换和加载任务。 ## 核心数据转移架构 DBeaver的数据转移功能基于生产者-消费者模型构建,支持多种数据源和目标格式: ```m...

gitblog_00500的博客 713

批量导入

//批量导入@Transactional(rollbackFor = BusinessException.class)public void doImport(MultipartFile file) throws BusinessException { List<Document> documentList = new ArrayList<Document>...

a78451的博客 152
上一篇: 文件下载(不创建文件,直接传到前台)
下一篇: java写excel文件及遇到的问题
java_trainee
博客等级 码龄10年 12粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值