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

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

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

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

/**

* 分割数组,以n为个数

* @param source 源数组

* @param n 多少组

* @return

*/

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

List<List<T>> result=new ArrayList<List<T>>();

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

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

int offset=0;//偏移量

for(int i=0;i<n;i++){

List<T> 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 <T> List<List<T>> averageAssignByPer(List<T> source,int n){

List<List<T>> result=new ArrayList<List<T>>();

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

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

for(int i=0;i<number+1;i++){

List<T> value=null;

if(i<number){

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

}else{

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

}

result.add(value);

}

return result;

}

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,215评论 0 2
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,228评论 0 13
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,946评论 0 3
  • 《通往财富自由之路》——为什么你总是半途而废 思考与行动 1. 你有没有什么事情是自己做起来兴趣盎然毫不费力,别人...
    QimuAI阅读 3,520评论 0 2
  • 黑洞从字面上看,应该是一个黑色的洞!其实不尽然,到目前在对于黑洞的介绍都是些假说! 黑洞他可能是洞,也可能他就是个...
    当作梦I写成真阅读 1,396评论 0 1

友情链接更多精彩内容