JDBC IN 句のパラメータ化: 効率的なアプローチ
SELECT * FROM MYTABLE WHERE MYCOL in ( などの IN 句クエリを処理する場合?)、引数をパラメータ化することで、セキュリティと効率が確保されます。 JDBC は直接的な解決策を提供しませんが、特定のドライバーは PreparedStatement#setArray().
パラメータ化のヘルパー メソッド
をサポートする場合があります。直接サポートがない場合は、ヘルパー メソッドを活用して、IN 句のプレースホルダーを生成し、値を動的に設定できます。
実装例
次のデータ アクセス方法を考えてみましょう。
private static final String SQL_FIND = "SELECT id, name, value FROM entity WHERE id IN (%s)";
public List find(Set ids) throws SQLException {
List entities = new ArrayList();
String sql = String.format(SQL_FIND, preparePlaceHolders(ids.size()));
try (
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
) {
setValues(statement, ids.toArray());
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
entities.add(map(resultSet));
}
}
}
return entities;
}
重要な考慮事項
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3