JAVA代码中如何使用IN查询(数据量大于10000的时候)

当面临14366条数据的查询任务时,通过分组将数据分为999条一组,利用编辑工具转换为SQL的IN查询格式。由于Java中字符串常量长度限制,遇到编译错误,通过改用StringBuilder解决。最终成功实现批量查询。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

近一周收到一个task,需要查询一批编码的数据,总共数据量是14366条
这么多数据量,总不能一次一次调用数据库吧,我就用了in查询
期间我也做了很多体力活,哈哈

step1:
先把需要查询的数据从EXCEL中拷贝出来,复制到任何一款编辑工具中;
在这里插入图片描述
step2:利用编辑工具分组,999个数据一组,因为in查询一次最大只能999,不能超过一千个
Ctrl + G :输入1000,跳转到1000行的目标位置
在这里插入图片描述
然后将999行到第一行的数据全部拷贝出来,新建一个窗口放进去,重复这个动作将所有的数据分拆

接下来就是把数据变成我们SQL中需要的样子:
在这里插入图片描述
从第二行往回拉到第一行末尾,选中截图中这个类似于空格的东西,(UE里面直接输入:^p 这个就是换行的意思)
Ctrl + F调出:搜索替换窗口
切换到替换table页,在替换为一栏输入:’,’
然后全部替换就成截图中的样子了,在开头加上单引号,删掉结尾的多余部分,’
在这里插入图片描述
查询条件准备好了,就把分拆好的所有编码按照这个动作完成
然后就把条件带入SQL:

String querySQL = "select m.wtpartnumber as 编码, 
max(p.versionida2versioninfo || '.' || p.iterationida2iterationinfo||'.'|| p.statestate ) as 版本, 
 max(m.name) as 名称 
 from wcadmin.manufacturerpartmaster m,wcadmin.manufacturerpart  p 
 where p.ida3masterreference=m.ida2a2 
 and p.latestiterationinfo=1 
---这里就是你在编辑器里面输入的999个编码,带引号的那种
and (m.wtpartnumber in ('0~999')
or m.wtpartnumber in ('1000~1999'))
........15次in
group by m.wtpartnumber
ResultSet rs = db.executeQuery(querySQL );

然后我就兴高采烈的编译,部署(高兴的太早了),编译的时候控制台报错
在这里插入图片描述
[javac] D:\ptc\Windchill_10.0\Windchill\patches\Build_MPIP导出工具_Wonly_20200212_V01\src\ext\tools\wonly\IP4MPInfoReport.java:76: 常量字符串过长
什么意思,自行百度了一下,意思是我的字符串常量querySQL超过最大长度了,怎么破?要不我用stringBuilder试试呢

StringBuilder builder = new StringBuilder();
builder.append("select m.wtpartnumber as 编码, max(p.versionida2versioninfo || '.' || p.iterationida2iterationinfo|| '--' || p.statestate) as 状态,  max(m.name) as 名称  ");
builder.append("from wcadmin.manufacturerpartmaster m,wcadmin.manufacturerpart  p ");
builder.append("where p.ida3masterreference=m.ida2a2 and p.latestiterationinfo=1  ");
builder.append("and (m.wtpartnumber in ('0~999')
builder.append("or m.wtpartnumber in ('1000~1999')
builder.append("or m.wtpartnumber in ('14300-14366')));
builder.append("group by m.wtpartnumber ");
ResultSet rs = db.executeQuery(builder.toString());

然后编译通过了,我特么太厉害

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值