Verwenden von gespeicherten Prozeduren mit einem Rückgabestatus
Bei einer aufrufbaren gespeicherten SQL Server-Prozedur handelt es sich um eine Prozedur, die einen Status- oder Ergebnisparameter zurückgibt. Damit wird normalerweise ermittelt, ob die gespeicherte Prozedur erfolgreich ausgeführt wurde oder fehlgeschlagen ist. Microsoft SQL Server 2005 JDBC Driver enthält die SQLServerCallableStatement-Klasse, mit der Sie diese Art von gespeicherter Prozedur aufrufen und die zurückgegebenen Daten verarbeiten können.
Wenn Sie diese Art von gespeicherter Prozedur 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 einem Rückgabestatusparameter lautet wie folgt:
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
Hinweis
Weitere Informationen zu SQL-Escapesequenzen finden Sie unter Verwenden von SQL-Escapesequenzen.
Geben Sie die Rückgabestatusparameter beim Erstellen der call
-Escapesequenz mit dem Fragezeichen (?) an. das als Platzhalter für den Parameterwert fungiert, der von der gespeicherten Prozedur zurückgegeben wird. Um einen Wert für einen Rückgabestatusparameter anzugeben, müssen Sie vor dem Ausführen der gespeicherten Prozedur den Datentyp des Parameters mit der registerOutParameter-Methode der SQLServerCallableStatement-Klasse angeben.
Hinweis
Wenn der JDBC-Treiber mit einer SQL Server-Datenbank verwendet wird, handelt es sich bei dem Wert, der in der registerOutParameter-Methode für den Rückgabestatusparameter angegeben wird, immer um einen integer-Wert. Dies können Sie mit dem Datentyp java.sql.Types.INTEGER angeben.
Wenn Sie an die registerOutParameter-Methode einen Wert für einen Rückgabestatusparameter übergeben, müssen Sie darüber hinaus nicht nur den Datentyp für den Parameter angeben, sondern auch die ordinale Position des Parameters im Aufruf der gespeicherten Prozedur. Für den Rückgabestatusparameter ist die ordinale Position immer 1, da es sich immer um den ersten Parameter im Aufruf der gespeicherten Prozedur handelt. Obwohl die SQLServerCallableStatement-Klasse die Verwendung des Namens eines Parameters zum Angeben dieses Parameters unterstützt, können Sie für Rückgabestatusparameter nur die Ordnungspositionsnummer verwenden.
Erstellen Sie als Beispiel die folgende Prozedur in der SQL Server 2005 AdventureWorks-Beispieldatenbank:
CREATE PROCEDURE CheckContactCity
(@cityName CHAR(50))
AS
BEGIN
IF ((SELECT COUNT(*)
FROM Person.Address
WHERE City = @cityName) > 1)
RETURN 1
ELSE
RETURN 0
END
Diese gespeicherte Prozedur gibt abhängig davon, ob der im cityName-Parameter angegebene Ort in der Person.Address-Tabelle gefunden wurde, den Statuswert 1 oder 0 zurück.
Im folgenden Beispiel werden eine offene Verbindung zur AdventureWorks-Beispieldatenbank an die Funktion übergeben und die gespeicherte Prozedur "CheckContactCity" mit der execute-Methode aufgerufen:
public static void executeStoredProcedure(Connection con) {
try {
CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setString(2, "Atlanta");
cstmt.execute();
System.out.println("RETURN STATUS: " + cstmt.getInt(1));
}
cstmt.close();
catch (Exception e) {
e.printStackTrace();
}
}