select * from table where id in (),in后面的括号里的数目超过1000条。
解决方法:
拆分:id in () or id in()。
/**
* 把超过1000的申请号数组拆分成数量splitNum的多组sql的in 集合。
* @param sqhArrays 申请号的数组
* @param splitNum 拆分的间隔数目,例如: 1000
* @param columnName SQL中引用的字段名例如: Z.SHENQINGH
* @return
*/
public static String getSqlStrByArrays(String sqhArrays, String splitStr, int splitNum,String columnName){
if(Tools.isNullStr(sqhArrays)){
return null;
}else{
String[] arrStr = sqhArrays.split(splitStr);
return getSqlStrByList(Arrays.asList(arrStr),splitNum,columnName);
}
}
/**
* Example:
* List sqhlist=[aa,bb,cc,dd,ee,ff,gg] ;
* Test.getSqlStrByList(sqhList,3,"SHENQINGH")=
* "SHENQING IN ('aa','bb','cc') OR SHENQINGH IN ('dd','ee','ff') OR SHENQINGH IN ('gg')"
*
* 把超过1000的申请号集合拆分成数量splitNum的多组sql的in 集合。
* @param sqhList 申请号的List
* @param splitNum 拆分的间隔数目,例如: 1000
* @param columnName SQL中引用的字段名例如: Z.SHENQINGH
* @return
*/
public static String getSqlStrByList(List sqhList, int splitNum,String columnName) {
if(splitNum>1000) //因为数据库的列表sql限制,不能超过1000.
return null;
StringBuffer sql = new StringBuffer("");
if (sqhList != null) {
sql.append(" ").append(columnName).append (" IN ( ");
for (int i = 0; i < sqhList.size(); i++) {
sql.append("'").append(sqhList.get(i) + "',");
if ((i + 1) % splitNum == 0 && (i + 1) < sqhList.size()) {
sql.deleteCharAt(sql.length() - 1);
sql.append(" ) OR ").append(columnName).append (" IN (");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(" )");
}
return sql.toString();
}