Verwenden von gespeicherten Prozeduren mit einer Updatezählung

Zum Ändern von Daten in einer SQL Server-Datenbank mit einer gespeicherten Prozedur verfügt der Microsoft SQL Server JDBC Driver über die SQLServerCallableStatement-Klasse. Mithilfe der SQLServerCallableStatement-Klasse können Sie gespeicherte Prozeduren aufrufen, die Daten in der Datenbank ändern und die Anzahl der betroffenen Zeilen zurückgeben (die so genannte Updatezählung).

Nachdem der Aufruf der gespeicherten Prozedur mit der SQLServerCallableStatement-Klasse eingerichtet wurde, können Sie die gespeicherte Prozedur mit der execute-Methode oder der executeUpdate-Methode aufrufen. Die executeUpdate-Methode gibt im Gegensatz zur execute-Methode einen int-Wert zurück, der die von der gespeicherten Prozedur betroffenen Zeilen enthält. Wenn Sie die execute-Methode verwenden und die Anzahl der betroffenen Zeilen ermitteln möchten, können Sie nach dem Ausführen der gespeicherten Prozedur die getUpdateCount-Methode aufrufen.

Hinweis

Wenn der JDBC-Treiber alle Updatezählungen zurückgeben soll, einschließlich der Updatezählungen, die von eventuell ausgelösten Triggern zurückgegeben werden, müssen Sie die lastUpdateCount-Verbindungseigenschaft auf "false" setzen. Weitere Informationen zur lastUpdateCount-Eigenschaft finden Sie unter Festlegen von Verbindungseigenschaften.

Erstellen Sie als Beispiel die folgende Tabelle und gespeicherte Prozedur, und fügen Sie Beispieldaten in der SQL Server 2005 AdventureWorks-Beispieldatenbank ein:

CREATE TABLE TestTable 
   (Col1 int IDENTITY, 
    Col2 varchar(50), 
    Col3 int);

CREATE PROCEDURE UpdateTestTable
   @Col2 varchar(50),
   @Col3 int
AS
BEGIN
   UPDATE TestTable
   SET Col2 = @Col2, Col3 = @Col3
END;
INSERT INTO dbo.TestTable (Col2, Col3) VALUES ('b', 10);

Im folgenden Beispiel wird eine offene Verbindung mit der AdventureWorks-Beispieldatenbank an die Funktion übergeben, mit der execute-Methode die gespeicherte Prozedur UpdateTestTable aufgerufen und anschließend mit der getUpdateCount-Methode die Anzahl der von der gespeicherten Prozedur betroffenen Zeilen zurückgegeben.

public static void executeUpdateStoredProcedure(Connection con) {
   try {
      CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");
      cstmt.setString(1, "A");
      cstmt.setInt(2, 100);
      cstmt.execute();
      int count = cstmt.getUpdateCount();
      cstmt.close();

      System.out.println("ROWS AFFECTED: " + count);
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Siehe auch

Andere Ressourcen

Verwenden von Anweisungen mit gespeicherten Prozeduren