クエリの実行中に、JDBC の preparedStatement の in 句に値を設定する方法。
例:
connection.prepareStatement("Select * from test where field in (?)");
この in 句が複数の値を保持できる場合、どうすればよいでしょうか。パラメータのリストが事前にわかっている場合もあれば、事前にわからない場合もあります。この場合はどのように対処すればよいでしょうか。
ベストアンサー1
私がやっていることは、それぞれの可能な値に「?」を追加することです。
var stmt = String.format("select * from test where field in (%s)",
values.stream()
.map(v -> "?")
.collect(Collectors.joining(", ")));
代替使用法StringBuilder
(10年以上前の元の回答でした)
List values = ...
StringBuilder builder = new StringBuilder();
for( int i = 0 ; i < values.size(); i++ ) {
builder.append("?,");
}
String placeHolders = builder.deleteCharAt( builder.length() -1 ).toString();
String stmt = "select * from test where field in ("+ placeHolders + ")";
PreparedStatement pstmt = ...
そして、パラメータを設定する
int index = 1;
for( Object o : values ) {
pstmt.setObject( index++, o ); // or whatever it applies
}