oracle in语句超过1000数据报错和解决办法

oracle有限制in语句的长度,如果查询长度超过1000,就会报jdbc错误:“java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000”。

因为项目用的是spirng jpa封装的持久层代码,数据量少的时候可以直接用in来查询,数据量多的时候就会有这个报错。下面是项目里的解决方案

对传入的数组做分割处理,有两种分隔方法,一种传入结果期望的分组个数,一种是传入期望的每组个数。代码如下:

/**

* 分割数组,以n为个数

* @param source 源数组

* @param n 多少组

* @return

*/

public static List> averageAssign(List source,int n){

List> result=new ArrayList>();

int remaider=source.size()%n;  //(先计算出余数)

int number=source.size()/n;  //然后是商

int offset=0;//偏移量

for(int i=0;i

List value=null;

if(remaider>0){

value=source.subList(i*number+offset, (i+1)*number+offset+1);

remaider--;

offset++;

}else{

value=source.subList(i*number+offset, (i+1)*number+offset);

}

result.add(value);

}

return result;

}

/**

* 分隔数组,指定每组多少个元素

* @param source 源数组

* @param n 每组几个元素

* @return

*/

public static List> averageAssignByPer(List source,int n){

List> result=new ArrayList>();

int number=source.size()/n;  //总共几组

int remain=source.size()%n;  //

for(int i=0;i

List value=null;

if(i

value=source.subList(i*n, (i+1)*n);

}else{

value=source.subList(i*n, i*n+remain);

}

result.add(value);

}

return result;

}

在处理数据量比较大的需求时谨慎使用in,in一般用于数量较小的时候。

你可能感兴趣的:(oracle in语句超过1000数据报错和解决办法)