例如,在我的代码中有一些地方,我的源查询中的问号数量会根据数据的某些特征而变化。我没有将用户数据放在 SQL 中,但我正在调整问号的数量。做到这一点的唯一方法是使用字符串连接/格式化/等,这会触发 Findbugs 的警告:
准备好的语句是从非常量字符串生成的
是否有一种(非代码异味)方法可以自动生成 SQL 而不会让 Findbugs 认为这是一个漏洞?
我现在拥有的示例代码:
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();