Cláusula IN de parametrização JDBC: uma abordagem eficiente
Ao lidar com uma consulta de cláusula IN, como SELECT * FROM MYTABLE WHERE MYCOL in ( ?), parametrizar argumentos garante segurança e eficiência. Embora o JDBC não ofereça uma solução direta, alguns drivers podem oferecer suporte a PreparedStatement#setArray().
Métodos auxiliares para parametrização
Na ausência de suporte direto, você pode aproveitar métodos auxiliares para gerar espaços reservados para a cláusula IN e definir valores dinamicamente.
Exemplo de implementação
Considere o seguinte método de acesso a dados:
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;
}
Principais considerações
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3