2015-09-14 29 views
0

我有一個多語句存儲過程,它首先執行一個select,然後在滿足某些條件時引發一個錯誤。JDBC SQL Server在多語句存儲過程中引發了錯誤處理

但是,存儲過程中的引發錯誤不會像我期望的那樣導致JDBC SQLException。

如果我刪除SELECT,那麼它工作正常。 The same type of behavior occurs with the print statement.

我有多種其他方式來處理這個問題,但爲了將來的參考,我想知道是否有方法來檢查是否存在提出的錯誤。

回答

1

SQL服務器協議的工作方式,您首先需要處理由select生成的結果集,然後移至下一個結果以獲取異常。

要處理所有結果(結果集,更新計數和例外),你需要做的是這樣的:

CallableStatement csmt = ...; 
boolean isResultSet = cstmt.execute(); 
do { 
    if (isResultSet) { 
     // process result set 
     try (ResultSet rs = csmst.getResultSet()) { 
      while(rs.next()) { 
       // ... 
      } 
     } 
    } else { 
     int updateCount = rs.getUpdateCount(); 
     if (updateCount == -1) { 
      // -1 when isResultSet == false means: No more results 
      break; 
     } else { 
      // Do something with update count 
     } 
    } 
    isResultSet = cstmt.getMoreResults(); 
} while(true); 

當存儲過程的執行到達例外,這也將異常報告給您java應用程序(iirc從getMoreResults())。