遇到个问题,需要修改个功能这个mapper里面传的参数非常多有可能6000以上,直接传就报错了
报错信息如下
在这里插入代码片### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
### The error occurred while setting parameters
### SQL:
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
; uncategorized SQLException for SQL []; SQL state [S0001]; error code [8003]; 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
修改思路用2000作为节点,做循环,第一次是0到2000,第二次2001到4000……
放部分代码供大家参考,实体类si中的Ptjhdidlist就是那个巨大的参数,后续就是往mapper里注入了,自行发挥吧
String[] split = ptjhdid.split(",");
if(split.length<=2000) {
for(int i=0;i<split.length;i++){
ptjhdidlist.add(split[i]);
}
si.setPtjhdidlist(ptjhdidlist);
}else {
int w = 2000;
int t = 0;
int zong = split.length;
t=zong/w+1;
for (int b = 0; b < t; b++) {
int h = b*w;
int r=(b+1)*w;
if(r>zong){
r=zong;
}
String[] spo = Arrays.copyOfRange(split, h, r);
for(int d=0;d<spo.length;d++){
ptjhdidlist.add(spo[d]);
}
si.setPtjhdidlist(ptjhdidlist);
}
}