Dans JDBC, la classe PreparedStatement fournit un moyen d'exécuter des requêtes SQL avec des valeurs dynamiques. Cependant, il existe une limitation lorsqu'il s'agit d'utiliser des noms de colonnes comme paramètres d'entrée.
Est-il possible de transmettre un nom de colonne comme paramètre d'entrée d'un PreparedStatement ?
Non, JDBC n'autorise pas la définition de noms de colonnes comme paramètres d'entrée pour PreparedStatements. Les PreparedStatements sont conçus pour accepter uniquement des valeurs, pas des métadonnées comme les noms de colonnes.
Considérons l'exemple suivant :
Tables :
Requête :
SELECT * FROM A, B WHERE "A"."X" = ?
Essayez d'utiliser le nom de la colonne comme Paramètre :
PreparedStatement statement = connection.prepareStatement("SELECT * FROM A, B WHERE \"A\".\"X\" = ?"); statement.setString(1, "B"."Y"); // Attempting to set column name as parameter ResultSet resultSet = statement.executeQuery(); // Returns empty result set
La requête SQL attend une valeur littérale pour le filtre de clause WHERE, pas un nom de colonne. Passer un nom de colonne en paramètre entraînera un ensemble de résultats vide car il n'y aura aucun enregistrement correspondant.
Pour obtenir des modifications dynamiques de l'instruction SQL, il est nécessaire de modifier la chaîne de requête avant de créer le PreparedStatement. Par exemple :
String query = "SELECT * FROM A, B WHERE " + columnName + " = ?"; PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, value); // Setting value for input parameter ResultSet resultSet = statement.executeQuery(); // Returns non-empty result set
Dans ce cas, la variable columnName est définie dynamiquement avec le nom de colonne souhaité. Cette approche permet une plus grande flexibilité dans la construction de requêtes SQL sans violer les limitations de JDBC.
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!