2009-12-22 12 views
12

Ich verbinde SQL Server (2005) über Java mit dem Microsoft SQL Server JDBC-Treiber 2.0.Abrufen des Rückgabewertes von JDBC MSSQL

Wie bekomme ich den Rückgabewert von einer gespeicherten Prozedur? Ich mache etwas wie:

Connection connection = dataSource.getConnection() 
CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }"); 
proc.execute(); 

Sollte ich execute() verwenden? executeQuery()? AusführenUpdate()? Keiner von diesen scheint standardmäßig einen Rückgabewert zu liefern, aber ich bin mir nicht sicher, wie ich dazu kommen soll.

EDIT 1: Um klar zu sein, weiß ich, wie gespeicherte Prozeduren aufgerufen werden. Diese Frage bezieht sich speziell darauf, wie Sie den RÜCKGABEWERT erhalten (im Gegensatz zu einem Ergebnissatz). Der Rückgabewert ist eine Ganzzahl, die normalerweise generiert wird, wenn Sie eine Abfrage ohne Result Set ausführen oder wenn Sie in Ihrem SQL beispielsweise etwas wie RETURN 0 angeben.

EDIT 2: executeUpdate() gibt ein int zurück, aber dieses int ist nicht das gleiche wie der Rückgabewert. Außerdem ist ein OUT-Parameter nicht identisch mit einem Rückgabewert.

+0

Überprüfen Sie die folgenden Links [http://www.exampledepot.com/egs/java.sql/CallProcedure.html](http://www.exampledepot.com/egs/java.sql/CallProcedure.html) [ http://www.jguru.com/faq/view.jsp?EID=30731](http://www.jguru.com/faq/view.jsp?EID=30731) – Umesh

+0

Ich suche speziell nach dem Rückgabewert, ich suche keine generischen Informationen zum Aufruf von Sprocs. –

Antwort

33

Bozho die 2. überarbeitete Antwort nahe war aber nicht ganz da. Es führte mich jedoch zur Antwort.

den Code Am Beispiel ich mit begannen wir am Ende mit:

CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }"); 
proc.registerOutParameter(1, Types.INTEGER); 
proc.execute(); 
int returnValue = proc.getInt(1); 

hier der Schlüssel Stücke sind die vor dem „Ruf“ in der prepareCall Funktion, die einen Platz einrichtet für „=?“ der Rückgabewert und der registerOutputParameter. Es muss als Integer registriert werden, da der Rückgabewert immer ein int ist (zumindest in SQL Server, vielleicht ist es in anderen DBs anders). Sie müssen es daher mit getInt bekommen. Ich habe diese Methode getestet und es funktioniert.

+1

Oben ist 'Types.INTEGER'' java.sql.Types.INTEGER'. –

1
c.prepareCall("? = .."); 
cs.execute(); 
String returnedValue = cs.getString(1); 

(oder das Verfahren des entsprechenden Typs. Sie getObject Alternativ können)

Von an old getting started tutorial

die getXXX Methoden in Callable Werte abrufen aus den OUT-Parameter und/oder Rückgabewert eine gespeicherte Prozedur.

(Btw, die Links, die von Umesh zur Verfügung gestellt wurden, hatten diese Art von Informationen.)

+0

Das gibt einen Ausgabeparameter zurück, der sich von einem Rückgabewert unterscheidet. Ich denke, die gespeicherte Prozedur müsste einen Ausgabeparameter definiert haben, damit dies funktioniert. –

+0

nein, es ist nicht im Kontext von CallableStatement (überprüfen Sie meine aktualisierte Antwort) – Bozho

+0

Die Prepare-Aufrufsyntax ist falsch (keine JDBC-Escape-Syntax), der out-Parameter muss registriert werden, um später verfügbar zu sein, und die Verbindung ist tot. .. –

Verwandte Themen