java捕获不到存储过程里面手抛的错误

Posted tapt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java捕获不到存储过程里面手抛的错误相关的知识,希望对你有一定的参考价值。

采用spring的JDBCTemplate来操作增删查改,Basedao执行存储过程的方法如下:

 

 

此方法要么返回一个true,要么抛出异常;

现象:

当项目发布于tomcat中时,同样的代码,同样的过程,之前测试这个方法的时候,可以捕获过程中手动抛出的错误,过了段时间今天再测试时,发现捕获不到这个过程中手动抛出的错误了,而且此方法直接返回true!坑爹

查资料调试:

         1:当前过程中没有SET NOCOUNT ON;

2:在过程里面手动抛错误RAISERROR之前,如果有insert语句,tomcat可能就捕获不到这个手抛错误了,但是在不加SET NOCOUNT ON的情况下,把RAISERROR放到insert前面的话,可以捕获。

解决:

        

 

在CREATE PROCEDURE ….. AS 下面开一行,写上:

SET NOCOUNT ON

结论:

         不加set nocount on的时候,过程在websphere项目中是没问题的,但是在tomcat中可能会出问题,tomcat不像websphere一样有很多容错机制;

  为什么一样的代码,过程,以前可以捕获,现在无法捕获?因为这段时间数据库重新恢复过,而采用的备份是现场生产环境前段时间的数据库备份,猜测应该和数据库环境有关,具体未知,总之,直接加上 SET NOCOUNT ON 到过程里,在tomcat的jdbc中可以正常捕获了

以上是关于java捕获不到存储过程里面手抛的错误的主要内容,如果未能解决你的问题,请参考以下文章

在安装SAP B1时候出现找不到存储过程的问题

Java存储过程中的getOutputStream抛出错误

VB.Net 没有捕获存储过程 raiserror

MS SQL 和 Java:在调用存储过程期间找不到表变量

在雪花存储过程中捕获成功消息

SQLServer异常捕获