18.8.1 | Grundlagen |
CallableStatement ist von der Klasse PreparedStatement abgeleitet und ermöglicht deshalb das Setzen von Parametern, wie es auch bei vorbereitetem SQL möglich ist. Abbildung 18.19 zeigt den Ablauf bei der Ausführung einer Stored Procedure/Function mit JDBC.
Wenn man diesen Ablauf genauer betrachtet, stellt man fest, dass PreparedStatement im Wesentlichen um das Konzept der Ausgabe-Parameter erweitert wird.
- Zunächst wird über die Methode prepareCall() ein Exemplar vom Typ CallableStatement erzeugt.
- Rückgabewerte müssen vor der Ausführung mit der Methode registerOutParameter() registriert werden.
- Danach können über die von PreparedStatement her bekannten setXXX()-Methoden Parameter gesetzt werden.
- Durch Aufruf von executeUpdate() wird der Aufruf im Datenbanksystem ausgeführt.
- Anschließend können sowohl Rückgabewerte von Stored Functions als auch generell zuvor registrierte Ausgabe-Parameter über die getXXX()-Methoden abgerufen werden.
Die Durchführung des Aufrufs einer Stored Procedure wird an einem kleinen Beispiel vorgestellt: Angenommen, in der Datenbank existiert eine Stored Procedure liefere_titel_an(), die ISBN und Anzahl der gelieferten Titel als Parameter definiert. Die Java-Methode liefereTitelAn() führt den JDBC-Aufruf der Prozedur im folgenden Beispiel durch:public void liefereTitelAn(String isbn, int anzahl) throws SQLException { // Setzen des SQL-Strings String sql = "{ call liefere_titel_an(?,?) }"; CallableStatement call = con.prepareCall(sql); // Setzen der Parameter call.setString(1, isbn); call.setInt(2, anzahl); // Ausführen der Stored Procedure call.executeUpdate(); // Freigabe der Ressourcen call.close(); }In main() wird die Datenbankverbindung initialisiert und anschließend liefereTitelAn() mit Test-Parametern aufgerufen. Für den eigentlichen Prozeduraufruf werden dann folgende Schritte durchgeführt:Genau wie bei vorbereiteten SQL-Anweisungen kann man auch hier Platzhalter für Parameter durch Verwendung des Fragezeichens (»?«) einsetzen.
- Abrufen eines CallableStatement-Exemplars von Connection über die Methode prepareCall().
- Setzen der Parameter.
- Aufruf der Prozedur.
Über setXXX()-Methoden können die Parameter genau wie bei PreparedStatement gesetzt werden.