Paramétrage de la clause IN dans JDBC : existe-t-il une méthode directe ?
Dans JDBC, il peut être difficile de paramétrer efficacement les clauses IN. Une structure de requête typique est la suivante :
SELECT * FROM MYTABLE WHERE MYCOL in (?)
Afin d'injecter dynamiquement des valeurs dans des clauses comme celle-ci, nous avons besoin d'une méthode simple qui fonctionne sur différentes bases de données sans modifier le SQL.
Malheureusement, JDBC ne fournit pas de solution native à ce problème. Cependant, certains pilotes peuvent prendre en charge PreparedStatement#setArray() pour les clauses IN.
Méthodes alternatives
Alternativement, nous pouvons utiliser des méthodes d'assistance pour créer des espaces réservés et définir les valeurs des paramètres de manière itérative. Voici une implémentation :
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]); } }
Exemple d'utilisation :
```Java private static final String SQL_FIND = "SELECT identifiant, nom, valeur FROM entité WHERE id IN (%s)" ;public List
<code>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>
}
<code> <p><strong>注意事项</strong></p> - 请注意,某些数据库限制了IN子句中允许的值的数量。 - 此方法利用PreparedStatement接口,确保跨数据库兼容性。 - 还必须考虑数据库特定的优化,例如使用数组或批量更新。</code>
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!