2009-12-22 6 views
12

Sono connesso a SQL Server (2005) tramite Java utilizzando il driver JDBC di Microsoft SQL Server 2.0.Come ottenere il valore restituito da JDBC MSSQL

Come si ottiene il valore restituito da una stored procedure? Sto facendo qualcosa del tipo:

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

Dovrei usare execute()? executeQuery()? executeUpdate()? Nessuno di questi sembra restituire un valore di ritorno per impostazione predefinita, ma non sono sicuro di come arrivarci.

MODIFICA 1: Per essere chiari, so come chiamare stored procedure. Questa domanda riguarda specificamente come ottenere il VALORE DEL RITORNO (al contrario di un Set di risultati). Il valore di ritorno è un numero intero che viene generalmente generato quando si esegue una query senza Set di risultati o se si specifica nello specifico qualcosa come RETURN 0 nel proprio SQL.

EDIT 2: executeUpdate() restituisce un valore int ma questo valore non è uguale al valore restituito. Inoltre, un parametro OUT non è uguale a un valore di ritorno.

+0

Controllare i collegamenti seguenti [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

Sto cercando specificamente di ottenere il Valore restituito, non sto cercando informazioni generiche sulla chiamata di sproc. –

risposta

33

di Bozho era vicino, ma non del tutto lì. Mi ha portato alla risposta però.

Prendendo l'esempio di codice ho iniziato con noi finisce con:

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

I pezzi chiave sono il davanti alla "chiamata" nella funzione prepareCall, che istituisce un luogo per "=?" il valore restituito e il registerOutputParameter. Deve essere registrato come un intero, in quanto il valore di ritorno è sempre un int (almeno in SQL Server, forse è diverso in altri DB). Quindi devi ottenerlo usando getInt. Ho provato questo metodo e funziona.

+1

Sopra, il 'Types.INTEGER' è' java.sql.Types.INTEGER'. –

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

(o il metodo del tipo appropriato. È possibile utilizzare getObject alternativamente)

Da an old getting started tutorial

metodi getXXX in CallableStatement recuperano valori dai parametri OUT e/o valore restituito una procedura memorizzata.

(Btw, i collegamenti che sono stati forniti da Umesh avevano questo tipo di informazioni.) 2 ° risposta rivisto

+0

Questo restituisce un parametro di output, che è diverso da un valore di ritorno. Penso che la procedura memorizzata dovrebbe avere un parametro di output definito affinché funzioni. –

+0

no, non è nel contesto di CallableStatement (controllare la mia risposta aggiornata) – Bozho

+0

La sintassi di chiamata preparata non è corretta (nessuna sintassi di escape JDBC), il parametro out deve essere registrato per essere disponibile in seguito e il collegamento è morto. .. –