Advanced Java Services | Stored Procedures/Functions |
Im folgenden werden nur kleine Beispiele gezeigt, mit denen die Vorgehensweise sichtbar wird.
Callable Statement cs = conn.prepareCall( "{call procedure_name}" );
Callable Statement cs = conn.prepareCall( "{call procedure_name(?, ?, ?)}" );
Die Parameter können reine Übergabeparameter (IN Parameter) sein oder reine Ausgabeparameter (OUT Parameter) oder beides (IN OUT Parameter).
Callable Statement cs = conn.prepareCall( "{? = call function_name}" );
Eine Funktion gibt immer genau einen Wert zurück, unabhängig von zusätzlich möglichen Übergabeparametern, die wieder IN oder OUT oder IN OUT sein können.
Callable Statement cs = conn.prepareCall( "{? = call function_name(?, ?)" );
Die in einem Aufruf gesetzten Fragezeichen stehen für Parameter, die nachgeliefert werden müssen oder in denen ein Ergebnis nach dem Aufruf liegt. Die Fragezeichen werden von links nach rechts beginnend bei 1 durchnumeriert.
CallableStatement cs = conn.prepareCall( "{call procedure_name(?, ?)}" ); cs.setInt(1, 25); cs.setString(2, "wzlbrmpft");
Der erste Parameter der set-Methoden gibt die Position an, 2 etwa steht für das zweite Fragezeichen. Mit dem zweiten Parameter wird er zu setzende Wert übergeben.
CallableStatement cs = conn.prepareCall( "{call procedure_name(?, ?, ?)}" ); cs.setInt(1, 25); cs.registerOutParameter(2, java.sql.Types.DOUBLE); cs.registerOutParameter(3, java.sql.Types.VARCHAR);
Hier sind der zweite und der dritte Parameter OUT Parameter.
CallableStatement cs = conn.prepareCall( "{ ? = call procedure_name(?, ?)}" ); cs.registerOutParameter(1, java.sql.Types.DOUBLE); cs.setInt(2, 25); cs.registerOutParameter(3, java.sql.Types.VARCHAR);
Der Returnwert hat immer die Indexnummer 1 und ist immer ein OUT Parameter. Parameter 2 ist hier ein IN Parameter, Parameter drei wieder ein OUT Parameter.
CallableStatement cs = conn.prepareCall( "{call procedure_name(?, ?)}" ); cs.setInt(1, 25); cs.setString(2, "wzlbrmpft"); cs.registerOutParameter(2, java.sql.Types.VARCHAR);
Hier ist der erste Parameter ein IN Parameter und der zweite ein INOUT Parameter.
Nach dem Setzen und Registrieren wird die Prozedur (Funktion) durch einen execute() Aufruf abgearbeitet.
cs.execute();
Falls es OUT Parameter gegeben hat, werden diese nach execute() mit geeigneten get-Methoden abgeholt.
ResultSet rs = (ResultSet)cs.getObject(1); int i = cs.getInt(3);
Hier handelte es sich entweder um eine Funktion, die ein ResultSet zurückgibt und als zweiten Parameter in der Parameterliste einen OUT Parameter vom Typ INTEGER hat, oder um eine Prozedur, die im ersten Parameter (OUT) der Liste ein ResultSet zurückgibt und im dritten Parameter (OUT) ein INTEGER.