"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso parametrizar efetivamente uma cláusula IN no JDBC?

Como posso parametrizar efetivamente uma cláusula IN no JDBC?

Publicado em 2024-11-02
Navegar:675

How can I parameterize an IN clause in JDBC effectively?

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.

  • preparePlaceHolders(int length): gera uma lista separada por vírgulas de espaços reservados de comprimento especificado.
  • setValues(PreparedStatement preparadoStatement, Object... valores): define valores em um loop usando PreparedStatement#setObject().

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

  • Os bancos de dados podem limitar o número de valores permitidos em uma cláusula IN.
  • Essa abordagem garante a portabilidade entre diferentes bancos de dados isolando a geração de instruções SQL da configuração de valor.
Tutorial mais recente Mais>

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