Maison >Java >javaDidacticiel >Comment utiliser PreparedStatements avec les paramètres de clause Dynamic IN dans JDBC ?

Comment utiliser PreparedStatements avec les paramètres de clause Dynamic IN dans JDBC ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-16 03:42:10710parcourir

How to Use PreparedStatements with Dynamic IN Clause Parameters in JDBC?

Utilisation de PreparedStatement avec les paramètres de la clause IN

Question :

Comment pouvez-vous remplir un formulaire préparé instruction dans JDBC avec une liste de paramètres dans une clause IN ? Ceci est particulièrement important lorsque la liste des paramètres peut ne pas être connue à l'avance.

Solution :

Pour construire dynamiquement une clause IN avec plusieurs valeurs, suivez ces étapes :

  1. Créez un espace réservé pour chaque valeur dans la clause IN, en utilisant un point d'interrogation (?):
var stmt = String.format("select * from test where field in (%s)",
                         values.stream()
                         .map(v -> "?")
                         .collect(Collectors.joining(", ")));
  1. Préparez l'instruction en utilisant la chaîne construite :
PreparedStatement pstmt = connection.prepareStatement(stmt);
  1. Définissez les valeurs dans la clause IN, un par un, à partir de l'index 1 :
int index = 1;
for (Object o : values) {
    pstmt.setObject(index++, o); // Replace with appropriate data type
}

Cette approche permet de gérer des paramètres multiples ou inconnus dynamiquement.

Solution alternative utilisant StringBuilder :

List<String> values = ...;
StringBuilder builder = new StringBuilder();

for (int i = 0; i < values.size(); i++) {
    builder.append("?,");
}

String placeHolders = builder.deleteCharAt(builder.length() - 1).toString();
String stmt = "select * from test where field in (" + placeHolders + ")";

Suivez les mêmes étapes que ci-dessus pour préparer l'instruction et définir les valeurs.

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