Utilisation d’une instruction SQL avec des paramètres
Pour utiliser des données dans une base de données SQL Server à l’aide d’une instruction SQL qui contient des paramètres IN, vous pouvez utiliser la méthode executeQuery de la classe SQLServerPreparedStatement pour retourner un SQLServerResultSet qui contiendra les données demandées. Pour ce faire, vous devez commencer par créer un objet SQLServerPreparedStatement à l’aide de la méthode prepareStatement de la classe SQLServerConnection.
Lors de la construction d'une instruction SQL, les paramètres IN sont spécifiés à l'aide du caractère ? (point d'interrogation) qui fait office d'espace réservé pour les valeurs de paramètre qui sont transmises par la suite à l'instruction SQL. Pour spécifier une valeur pour un paramètre, vous pouvez utiliser l'une des méthodes de définition de la classe SQLServerPreparedStatement. La méthode setter que vous utilisez est déterminée par le type de données de la valeur que vous souhaitez transmettre dans l'instruction SQL.
Lorsque vous transmettez une valeur à la méthode setter, vous devez spécifier non seulement la valeur réelle à utiliser dans l'instruction SQL, mais également la position ordinale du paramètre dans l'instruction. Par exemple, si votre instruction SQL contient un seul paramètre, sa valeur ordinale sera 1. Si l’inscription contient deux paramètres, la première valeur ordinale sera 1, tandis que la deuxième sera 2.
Dans l’exemple suivant, une connexion ouverte à l’exemple de base de données AdventureWorks2022 est transmise à la fonction, une instruction préparée SQL est construite et exécutée avec une valeur de paramètre String unique, puis les résultats sont lus à partir du jeu de résultats.
public static void executeStatement(Connection con) {
try(PreparedStatement pstmt = con.prepareStatement("SELECT LastName, FirstName FROM Person.Contact WHERE LastName = ?");) {
pstmt.setString(1, "Smith");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
}
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}