/**
* 解决Oracle where条件中in条件超过1000大小 列表中的最大表达式数为 1000
* 把以逗号(',')分割的字符串分割成固定大小的多个组
* 把分割开的字符串用 or关键字拼接 然后查询
* param:以逗号分隔的字符串
* eachGroupNum:每组多少个数量
* field:SQL语句中哪个字段查询
*/
public String setConditionByOr(String param, int eachGroupNum, String field){
String[] paramArray = param.split(",");
int inArrayNum = (paramArray.length % eachGroupNum == 0) ? paramArray.length / eachGroupNum : paramArray.length / eachGroupNum + 1;
int m = 0;
int b = 0;
int n = eachGroupNum;
String[] p = new String[inArrayNum];
String[] sql = new String[inArrayNum];
for (int k = 0; k < paramArray.length; ++k) {
if (b < inArrayNum) {
p[b] = "";
for (; m < n; ++m) {
if (m >= paramArray.length){break;}
int temp = b;
String[] tmp = p;
tmp[temp] = tmp[temp] + paramArray[m] + ",";
}
p[b] = p[b].substring(0, p[b].lastIndexOf(","));
sql[b] = field + " in (" + p[b] + ")";
++b;
n += eachGroupNum;
}
}
String condition = "";
for (int j = 0; j < sql.length; ++j) {
condition = condition + sql[j] + " or ";
}
condition = condition.substring(0, condition.lastIndexOf(" or "));
return condition;
}
转载请注明原文地址: https://ju.6miu.com/read-149616.html