我需要做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) + ')');