2009-12-22 59 views
12

我使用Microsoft SQL Server JDBC Driver 2.0通過Java連接到SQL Server(2005)。從JDBC MSSQL獲取返回值

如何從存儲過程獲取返回值?我正在做類似:

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

我應該使用execute()嗎?的executeQuery()?的executeUpdate()?這些似乎都沒有返回默認的返回值,但我不確定如何去實現它。

編輯1:要清楚,我知道如何調用存儲過程。這個問題具體是關於如何獲得返回值(而不是結果集)。返回值是一個整數,通常在執行不帶結果集的查詢時生成,或者如果您在SQL中專門聲明瞭類似RETURN 0的內容。

編輯2:executeUpdate()返回一個int,但這個int不是返回值相同。另外,OUT參數與返回值不同。

+0

檢查以下鏈接[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 2009-12-22 17:17:14

+0

我正在尋找專門獲取返回值,我不在尋找關於調用sprocs的一般信息。 – 2009-12-22 17:21:49

回答

33

Bozho的第2版修訂的回答很接近,但不能令人信服。但它的確讓我回答了答案。

以代碼示例我開始與我們結束了:

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

的關鍵部分在這裏是在中prepareCall功能,設置了一個地方,「呼叫」前方「=?」返回值和registerOutputParameter。它必須註冊爲Integer,因爲返回值總是int(至少在SQL Server中,也許在其他DB中不同)。因此您必須使用getInt。我測試了這種方法,它確實有效。

+1

上面,'Types.INTEGER'是'java.sql.Types.INTEGER'。 – 2015-12-09 08:48:45

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

(或適當的類型的方法。可以使用getObject替代地)

an old getting started tutorial

CallableStatement中的getXXX方法從OUT參數和/或返回值檢索值一個存儲過程。

(順便說一句,由Umesh製作中提供的鏈接過這樣的信息。)

+0

它返回一個輸出參數,它與返回值不同。我認爲存儲過程必須定義一個輸出參數才能工作。 – 2009-12-22 18:28:45

+0

不,它不在CallableStatement的上下文中(請檢查我的更新答案) – Bozho 2009-12-22 18:47:32

+0

準備調用語法不正確(無JDBC轉義語法),out參數需要註冊才能稍後使用,並且鏈接已死亡。 .. – 2015-03-02 09:22:27