文档章节

Mybatis如何捕捉存储过程抛出的异常

HansonReal
 HansonReal
发布于 2017/02/27 16:37
字数 315
阅读 1335
收藏 0

首先在PL/SQL中,创建一个存储过程如下:

		PROCEDURE p_test_say_hello(in_name   IN VARCHAR2,
															 out_hello OUT VARCHAR2,
															 out_code  OUT NUMBER,
															 out_msg   OUT VARCHAR2) IS
		BEGIN
				out_code := -1;
				out_msg  := 'ok';
				SELECT 'hello ,' + in_name--这个地方故意写错,应该使用"||"
					INTO out_hello
					FROM dual;
		EXCEPTION
				WHEN OTHERS THEN
						out_code := -1;--以前根据这个标识来判断过程是否执行成功
						out_msg  := 'p_test_say_hello:' || SQLERRM;
						RAISE;--用于抛出异常
		END;

Mybatis映射文件(Mapper.xml)程序如下:

    <select id="test"  statementType="CALLABLE" parameterType="java.util.HashMap">
        <![CDATA[
        {CALL pkg_test.p_test_say_hello
        (#{in_name,       	mode=IN,jdbcType=VARCHAR},
         #{out_hello,   		mode=IN,jdbcType=VARCHAR},
         #{out_code,           	mode=OUT,jdbcType=INTEGER},
         #{out_msg,            	mode=OUT,jdbcType=VARCHAR})}
        ]]>
     </select>

Mybatis映射接口(Mapper.java)

//一定要抛出异常
	List<Map<String, Object>> test(Map<String, Object> inMap)
			throws Exception;

Service中的示例代码:

	public List<Map<String, Object>> test(Map<String, Object> inMap) {
		try {
			inMap.put("in_name", "hanson");
			inMap.put("out_hello", "");
			inMap.put("out_msg", "");
			inMap.put("out_code", 0);
			return this.userSchemeDao.test(inMap);
		} catch (Exception e) {
			throw new RuntimeException("存储过程执行报错,报错信息如",e);
		}
	}

测试调用控制台结果:

Caused by: java.lang.RuntimeException: 存储过程执行报错,报错信息如:
### Error querying database.  Cause: java.sql.SQLException: ORA-01722: 无效数字
ORA-06512: 在 "EEOS_CM.PKG_CM_PROMOTIONS", line 402
ORA-06512: 在 line 1

结论:按照测试情况是能够扑捉到错误信息的

© 著作权归作者所有

HansonReal

HansonReal

粉丝 21
博文 15
码字总数 11891
作品 0
无锡
程序员
私信 提问
加载中

评论(3)

小生迷漫
当我没说,catch的是exception
小生迷漫
Mapper抛出的应该是SQLException吧,在service里,run time也能捕捉到嘛?
小生迷漫
Mapper抛出的应该是SQLException吧,在service里,run time也能捕捉到嘛?
Mybatis要如何捕捉存储过程执行异常的信息?

最近写的程序中发现存在如下的问题,当我用mybatis调用存储过程(数据库使用的是ORACLE),发现当过程执行存在异常,但是我事务任然提交了,目前的处理方法是根据过程中定义的返回标志来判断的,...

HansonReal
2017/02/27
461
4
mybatis 调用存储过程,如何抛出sql异常

在用mybatis调用数据库的存储过程时,我发现有时即使mybatis失败了,乃至存储过程异常了。mybatis也不会抛出异常,下面是处理这种情况的方法 1. 有如下存储过程( sqlServer 2012) 只要将ERR...

Canaan_
2016/06/15
241
0
Mybatis中捕获不到了MySQLIntegrityConstraintViolationException

Mybatis不鼓励捕捉异常,但在某些特定场景下需要捕捉,这个时候通过try catch是捕捉不到的,mybatis有自己的处理方式,它把异常映射成了DataAccessException,那么我们需要抛出异常并捕捉。 ...

jack_peng
2016/08/07
69
1
关于db2存储过程抛出异常让java捕捉到?

能否实现, java调用db2存储过程, db2抛出异常, java程序捕捉到, 可以实现吗?

gofree
2017/07/17
221
1
第33节:Java面向对象中的异常

Java中的异常和错误 Java中的异常机制,更好地提升程序的健壮性 throwable为顶级,Error和Exception Error:虚拟机错误,内存溢出,线程死锁 Exception:RuntimeException为空指针异常,数组...

达叔小生
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我对算卦的认识

现在越来越认识到算卦其实就是帮自己尽快的做一个决定。 有一次看锵锵三人行,有一期一个嘉宾讲了他去算卦的事情。当时他有两个选择,一个是从商,一个是当演员。算卦的结果是当演员,他就放...

我是菜鸟我骄傲
27分钟前
2
0
获取小程序链接

https://zhidao.baidu.com/question/494453810708570772.html

Js_Mei
30分钟前
0
0
AIOps落地的前提条件探索

笔者根据自身的技术和行业理解,探索分析AIOps在企业落地的前提条件。 涉及关键字:自动化运维、AIOps、技术运营PaaS、蓝鲸等。 作者:张敏 AIOps概念 Gartner在2016年时便提出了AIOps的概念...

嘉为科技
40分钟前
0
0
Cookie起源与发展

上一篇我们在讲优酷弹幕爬虫的时候,引入了一个新的知识点:Cookie,由于篇幅有限当时只是简单的给大家介绍了一下它的作用,今天我们就来全面了解一下Cookie(小饼干)以及相关的知识! 相信...

猪哥66
42分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部