我有一个多语句存储过程,它首先执行一个选择,然后在满足某些条件时引发错误。
但是,存储过程中的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()
)。