たとえば、私のコードでは、ソース クエリの疑問符の数がデータの特徴に基づいて変化する場所がいくつかあります。SQL にユーザー データを配置していませんが、疑問符の数を調整しています。これを行う唯一の方法は、文字列の連結/フォーマット/etc を使用することです。これにより、Findbugs から次の警告がトリガーされます。
準備済みステートメントが非定数文字列から生成された
Findbugs に脆弱性であると思わせることなく SQL を自動生成する (コードの臭いではない) 方法はありますか?
私が今持っているもののコード例:
final static String BASE_SQL = "SELECT * FROM customers WHERE id IN (questionMarkPlaceholder)";
[...]
final String questionMarks = "?" + StringUtils.repeat(", ?", customers.length - 1);
final String sql = BASE_SQL.replaceFirst("questionMarkPlaceholder", questionMarks);
statement = conn.prepareStatement(sql);
int counter = 1;
for (Customer customer : customers) {
statement.setString(counter, customer.getId());
counter++;
}
resultSet = statement.executeQuery();