はじめに
SQLの条件部分を動的に作成したい時があると思います。
具体的には、IN句に設定する値が動的に変化する場合です。
SELECT foo FROM sample_table
WHERE bar IN (?, ?, ?, ?, ?); -- ここの?の数が定まらない時に対処したい。
このようなSQLはパフォーマンスに問題が発生しがちではありますが、小規模案件では許容されることがほとんどではないでしょうか。
忘れたころにやってくる問題というイメージがあり、愚直にfor文を使えば書けますが、そろそろ簡潔に書きたいと思います。
Javaによる実装
int size = 10; // 作成したい?の数
String placeholders = IntStream.range(0, size)
.boxed()
.map(i -> "?")
.collect(Collectors.joining(", ", "(", ")"));
System.out.println(placeholders);
// (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
おわりに
個人的に(各言語において)革新的な書き方が見つかったら追記していきたいと思います。