Verwenden von gespeicherten Prozeduren mit Eingabeparametern
Eine gespeicherte SQL Server-Prozedur, die Sie aufrufen können, enthält einen oder mehrere IN-Parameter, d.h. Parameter, mit denen Sie Daten an die gespeicherte Prozedur übergeben können. Der Microsoft JDBC-Treiber für SQL Server stellt die Klasse SQLServerPreparedStatement zur Verfügung, mit der Sie diese Art von Stored Procedure aufrufen und die zurückgegebenen Daten verarbeiten können.
Wenn Sie eine gespeicherte Prozedur mit IN-Parametern mit dem JDBC-Treiber aufrufen, müssen Sie die call
-SQL-Escapesequenz zusammen mit der prepareCall-Methode der SQLServerConnection-Klasse verwenden. Die Syntax für die call
-Escapesequenz mit IN-Parameter lautet wie folgt:
{call procedure-name[([parameter][,[parameter]]...)]}
Hinweis
Weitere Informationen zu SQL-Escapesequenzen finden Sie unter Verwenden von SQL-Escapesequenzen.
Geben Sie die IN-Parameter beim Erstellen der call
-Escapesequenz mit dem Fragezeichen (?) an. das als Platzhalter für die Parameterwerte fungiert, die an die gespeicherte Prozedur übergeben werden. Mit den Settermethoden der SQLServerPreparedStatement-Klasse können Sie für einen Parameter einen Wert angeben. Die verwendbare Festlegungsmethode hängt vom Datentyp des IN-Parameters ab.
Wenn Sie einen Wert an die Festlegungsmethode übergeben, müssen Sie nicht nur den Wert angeben, der im Parameter verwendet wird, sondern auch die ordinale Position des Parameters in der gespeicherten Prozedur. Wenn die gespeicherte Prozedur beispielsweise einen einzigen IN-Parameter enthält, ist der Ordinalwert "1". Wenn die gespeicherte Prozedur zwei Parameter enthält, ist der erste Ordinalwert "1" und der zweite Ordinalwert "2".
Ein Beispiel für den Aufruf einer gespeicherten Prozedur mit einem IN-Parameter enthält die gespeicherte Prozedur „uspGetEmployeeManagers“ in der AdventureWorks2022-Beispieldatenbank. Diese gespeicherte Prozedur übernimmt einen einzelnen Eingabeparameter mit dem Namen "EmployeeID" (integer-Wert) und gibt abhängig von der angegebenen "EmployeeID" eine rekursive Liste der Mitarbeiter und deren Vorgesetzten zurück. Der Java-Code für den Aufruf dieser gespeicherten Prozedur sieht folgendermaßen aus:
public static void executeSprocInParams(Connection con) throws SQLException {
try(PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}"); ) {
pstmt.setInt(1, 50);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println("EMPLOYEE:");
System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
System.out.println("MANAGER:");
System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));
System.out.println();
}
}
}