近一周收到一个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());
然后编译通过了,我特么太厉害
当面临14366条数据的查询任务时,通过分组将数据分为999条一组,利用编辑工具转换为SQL的IN查询格式。由于Java中字符串常量长度限制,遇到编译错误,通过改用StringBuilder解决。最终成功实现批量查询。
&spm=1001.2101.3001.5002&articleId=104308058&d=1&t=3&u=d903a115453049eea9493622c0bd1298)
1107

被折叠的 条评论
为什么被折叠?



