Maison  >  Article  >  Java  >  Comment paramétrer une clause IN dans Java JDBC ?

Comment paramétrer une clause IN dans Java JDBC ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 03:15:02518parcourir

How to Parameterize an IN Clause in Java JDBC?

Paramétrage JDBC dans une clause IN

En Java JDBC, paramétrer les arguments dans une clause IN nécessite un peu plus d'ingéniosité par rapport à d'autres programmations langues.

Le problème se pose lorsque nous devons exécuter une requête telle que :

SELECT * FROM MYTABLE WHERE MYCOL IN (?)

Défis

JDBC ne fournit pas de moyen simple pour paramétrer la clause IN. Certains pilotes JDBC peuvent prendre en charge l'utilisation de PreparedStatement#setArray(), mais cette prise en charge varie selon les bases de données.

Solution

Pour surmonter ce défi, nous pouvons utiliser des méthodes d'assistance pour construire chaînes d'espace réservé et définissez les valeurs des paramètres dans une boucle.

<code class="java">public static String preparePlaceHolders(int length) {
    return String.join(",", Collections.nCopies(length, "?"));
}

public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException {
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 1, values[i]);
    }
}

Utilisation

Nous pouvons utiliser ces méthodes d'assistance dans notre code comme suit :

<code class="java">private static final String SQL_FIND = "SELECT id, name, value FROM entity WHERE id IN (%s)";

public List<Entity> find(Set<Long> ids) throws SQLException {
    List<Entity> 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;
}</code>

Limitations

Notez que certaines bases de données, comme Oracle, peuvent imposer une limite sur le nombre de valeurs autorisées dans une clause IN.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn