JDBC SQL Server在多语句存储过程中引发错误处理



我有一个多语句存储过程,它首先执行一个选择,然后在满足某些条件时引发错误。

但是,存储过程中的raise错误不会像我期望的那样导致JDBC SQLException。

如果我删除SELECT,那么它工作得很好。print语句也会出现相同类型的行为。

我有多种其他方法来处理这个问题,但为了将来的参考,我想知道是否有一种方法来检查是否存在引发的错误

根据SQL server协议的工作方式,您首先需要处理由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应用程序报告异常(从getMoreResults())。

相关内容

最新更新