Dans les requêtes SQL, la clause IN est utilisée pour faire correspondre une valeur avec une collection spécifiée. Lors de l'utilisation de Java et JDBC, le paramétrage des paramètres dans la clause IN est essentiel pour la sécurité et les performances.
Est-ce qu'une méthode de paramétrage direct existe ?
Malheureusement, JDBC ne fournit pas de moyen de paramétrer directement les valeurs dans la clause IN. Cependant, certains pilotes JDBC peuvent prendre en charge PreparedStatement#setArray().
Une solution globale
Pour résoudre ce problème, vous pouvez créer des méthodes d'assistance pour générer des espaces réservés et définir les valeurs dans une boucle. Voici comment cela fonctionne :
Exemple d'utilisation :
<code class="language-java">import java.util.*; import java.sql.*; 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()); // 执行查询... } return entities; }</code>
Remarque : Certaines bases de données ont des limites sur le nombre de valeurs autorisées dans la clause IN. Par exemple, Oracle limite ce nombre à 1 000 éléments.
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!