1

我用java訪問MSSQL 2012 DB無法得到結果的讀取

我在參數有一個存儲過程「procX」用只需要1,(比如命名爲@ P1)輸出參數之後設置並返回一個結果集。它工作正常,除非我在獲取結果集之前嘗試讀取返回值。代碼如下。如果我刪除「//」並得到返回值,那麼我得到null

cs = con.prepareCall("{? = call procX(?)}"); 
cs.registerOutParameter(1, Types.INTEGER); 
cs.setInt("p1", 1); 
cs.execute();   
//cs.getInt(1); 
rs = cs.getResultSet(); 

即使我得到結果集後讀取返回值,這會關閉結果集。

有沒有辦法讀取返回值,但不會無法獲得結果集?

而且據我所見,這種情況不限於返回值,並且對於任何其他輸出參數也是如此。

+1

@tottiroma得到詳細'我CallableStatement'猜測。 –

+0

是的,我正在使用CallableStatement –

+0

你對這個''有什麼想法? = call procX(?)'?存儲過程不會像函數那樣返回值,但是在存儲過程中,您可以設置輸出參數。 –

回答

0

有趣的是,

  • 首先:我不知道你用什麼樣的驅動程序,但是嘗試 變化,提供給我們的信息是相同的行爲或沒有。
  • 其次:如果您使用Microsoft JDBC驅動程序的SQL Server嘗試 調整記錄,看看是哪裏的問題,這個庫使用 java.util.logging.Logger日誌記錄之前/執行每個 操作之後。
  • 我想你使用的是Java 7,試着降級並在Java 6上運行它,爲什麼?因爲在用於SQL Server的Microsoft JDBC驅動程序中有一些有趣的邏輯(具有可關閉接口),因此getValue方法從getInt方法調用。
+0

的輸出我找到了答案,但不能在10小時之前添加它(我的聲望不足以回答我自己的問題) –

+0

看起來你必須在讀取任何輸出參數之前獲取結果集。 您可以從 http://stackoverflow.com/a/5576442/1519458 –

+0

的詳細信息@araqnoon這是一個很好的解釋,與微軟的驅動程序實現有關。 getInt方法有下一個工作流程,是getValue-> getgetterparsms(或者像這樣) - > **關閉活動流**我認爲這行失敗了你的結果集。 –