先说需求:从一个旧表将数据导入到新表中,然后删除旧表数据。
环境:jdk8,oracle数据库
导入的sql,insert into 新表 select* from 旧表,这里就不做过多说明了,这里不是重点。然后删除,delete from 旧表 where id in ('1','2')。
重点来了,由于旧表数据量太大了,in中最多只能支持1000个值,所以在删这里的时候就报错了。后来我就想到了stream,之前只用过map(),对集合的某一个列进行操作。后来就想到了可以可以用stream进行分页,结果真的查到了,skip()。
我是这样做的
int pageNum =0;
int pageSize =500;
if (list.size()%pageSize ==0) {
pageNum = pendOList.size()/pageSize;
}else {
pageNum = pendOList.size()/pageSize +1;
}
for (int i =0;i < pageNum;i++){
List pagelist = list.stream().skip(pageSize*i).
limit(pageSize).
collect(Collectors.toList());
//这里可以忽略
delete from 旧表 where id in (pagelist )。
}
这里就是记录一下自己的工作经历,希望大家喜欢。