我需要做select*基于输入id的列表,什么是批量选择的最佳方式?这是我有的
StringBuilder inClause=新建StringBuilder();
布尔值firstValue=true;
对于(int i=0;i包含.附加('?');
if(第一个值){
firstValue=false;
}其他{
包括附加(',');
}
}
PreparedStatement stmt=连接.prepareStatement(
“从id所在的用户中选择id,name(“+inClause.toString()+')”);
对于(int i=0;istmt.setInt(i);//或您试图查询的任何值
}

最佳答案

我觉得很好。在这段代码中发现了一个逻辑错误,

boolean firstValue = true;
for (int i=0; i < batchSize; i++) {
  inClause.append('?');
  if ( firstValue ) {
    firstValue = false;
  } else {
    inClause.append(',');
  }
}

它不会在第一个元素后面附加一个,。最后一个之后会有一个,。所以,你不必在意这里。就这样做吧
for (int i=0; i < batchSize; i++) {
  inClause.append('?, ');
}

然后像这样把最后两个字符切掉,
PreparedStatement stmt = conn.prepareStatement(
    "select id, name from users where id in (" +
    inClause.substring(0, inClause.length()-2) + ')');

10-06 00:39