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

Comment paramétrer une clause IN dans Java JDBC ?

Barbara Streisand
Libérer: 2024-11-01 03:15:02
original
623 Les gens l'ont consulté

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 (?)
Copier après la connexion

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]);
    }
}
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal