首页 > 编程语言 > 详细

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

时间:2018-09-06 17:49:01      阅读:274      评论:0      收藏:0      [点我收藏+]

采用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捕获不到存储过程里面手抛的错误

原文:https://www.cnblogs.com/tapt/p/9599222.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!