Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 479|回复: 0

Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-30 16:28:57 | 显示全部楼层 |阅读模式

    Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息

     

     

    1.1. 异常的处理模式exit  continue undo模式 1

    1.2. 捕获所有异常使用        DECLARE continue HANDLER FOR   sqlexception 1

    1.3. 捕获特定异常使用HANDLER FOR  errorcode 2

    1.4. 记录异常到日志表,获取异常代码和异常信息 2

    1.5. 抛出自定义异常 3

    2. 程序语言中捕获sql自定义抛出的异常 3

    2.1. 代码 3

    3. 集合的循环loop while repeat模式 4

    3.1. 对集合的循环 使用loop模式最简单,whilerepeat都麻烦店。loop模式会自动处理集合结束。 4

    3.2. While模式循环集合 。。需要定义一个 CONTINUE HANDLER FOR NOT FOUND 4

    3.3. 参考资料 5

     

     

    1.1. 异常的处理模式exit  continue undo模式

    默认情况下,mysql异常机制是exit模式,出错直接退出。。

    当当我们对一个集合循环做处理的时候,需要捕获异常,记录日志,继续执行。

     

     

     

     

     

    1.2. 捕获所有异常使用        DECLARE continue HANDLER FOR   sqlexception  

     

    相比js这一类语言的异常捕获,sql的异常捕获比较粗糙,只能捕获一个sp内的异常,不能精确到某几个代码行。。。

     

     

     

     

    BEGIN

    #Routine body goes here...

     DECLARE a  varchar(102)  ;   DECLARE code  varchar(102)  ;   DECLARE msg  varchar(102)  ;  

      DECLARE b varchar(100) ;  DECLARE n int ;

      ##catch

          DECLARE continue HANDLER FOR   sqlexception  

    cat1:BEGIN  

    GET DIAGNOSTICS CONDITION 1

    code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;

     

    SELECT code,msg;

    #exit ALL

     

    #leave cat1;

          END;  

    set n=1;

     

     

     

      # while n<5 do  

    lable:LOOP

           

    call exThrow();

        set  n=n+1;

    select  'in loop';

    if n>3 THEN

     

    select ' n>3 ';

    leave lable;

    end if;

     

      #end while;  

    end loop;

     

    END

     

    1.3. 捕获特定异常使用HANDLER FOR  errorcode

    1.4. 记录异常到日志表,获取异常代码和异常信息

     

    GET DIAGNOSTICS CONDITION 1

    code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;

     

    SELECT code,msg;

     

     

    1.5. 抛出自定义异常

    #Routine body goes here...

       SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";  

     

    2. 程序语言中捕获sql自定义抛出的异常

     

    2.1. 代码

     

    BEGIN

    #Routine body goes here...

       SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";  

     

    END

     

     

     

     

    {

    "@type":"java.lang.RuntimeException",

    "cause":{

    "@type":"java.sql.SQLException",

    "errorCode":1644,

    "localizedMessage":"extag_1 Query: call exThrow Parameters: []",

    "message":"extag_1 Query: call exThrow Parameters: []",

    "nextException":{

    "errorCode":1644,

    "localizedMessage":"extag_1",

    "message":"extag_1",

    "sQLState":"HY000",

    "sQLState":"HY000",

    "stackTrace":[{

    "localizedMessage":"java.sql.SQLException: extag_1 Query: call exThrow Parameters: []",

    "message":"java.sql.SQLException: extag_1 Query: call exThrow Parameters: []",

    "stackTrace":[{

     

     

     

    3. 集合的循环loop while repeat模式

    3.1. 对集合的循环 使用loop模式最简单,whilerepeat都麻烦店。loop模式会自动处理集合结束。

    BEGIN

    #Routine body goes here...

    DECLARE a  varchar(102)  ;  

    DECLARE b varchar(100) ;  DECLARE n int ;   DECLARE rs_finished int ;

     

    DECLARE cursor_name CURSOR FOR select id,identity from system_passport   order by id desc limit 3;  

    OPEN cursor_name;  

    lable:LOOP

         fetch  cursor_name into a,b;

         select a,b;    

     end LOOP;  

     

     

    END

     

     

     

    3.2. While模式循环集合 。。需要定义一个 CONTINUE HANDLER FOR NOT FOUND

     

     

     

    BEGIN

    #Routine body goes here...

    DECLARE a  varchar(102)  ;  

    DECLARE b varchar(100) ;  DECLARE n int ;   DECLARE rs_finished int ;

     

    DECLARE cursor_name CURSOR FOR select id,identity from system_passport   order by id desc limit 5;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET rs_finished=1;

     

    #set rs_finished=0;

    set n=1;select 'open cursor bef';

    OPEN cursor_name;

    select 'open cursor after';

    fetch  cursor_name into a,b;

     select a,b;

    select  rs_finished;  # is null

      while  rs_finished is null  do  

     

         select a,b;

      fetch  cursor_name into a,b;

     end while;  

     

     

    END

     

     

    3.3. 参考资料

     

    GET DIAGNOSTIC 语句 - 千里之行始于足下 - 博客频道 - CSDN.NET.html

    Atitit mysql数据库自定义异常在java里面的捕获与处理推荐标准与规范

     

     

     

    作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

    捕鸟王"Bird Catcher  kok  虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak 万兽之王

    简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

    全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当  阿尔 拉帕努伊

    常用名:艾提拉(艾龙),  EMAIL:1466519819@qq.com

     

     

    头衔:uke总部o2o负责人,全球网格化项目创始人,

    uke交友协会会长  uke捕猎协会会长 Emir Uke部落首席大酋长,

     

    uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

    uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

     

    uke 首席cto   软件部门总监 技术部副总监  研发部门总监主管  产品部副经理 项目部副经理   uke科技研究院院长 uke软件培训大师

     

    uke波利尼西亚区大区连锁负责人 汤加王国区域负责人 uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人

     Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长

     

    uke终身教育学校副校长   Uke医院 与医学院方面的创始人

     uec学院校长, uecip图像处理机器视觉专业系主任   uke文档检索专业系主任

    Uke图像处理与机器视觉学院首席院长

    Uke 户外运动协会理事长  度假村首席大村长   uke出版社编辑总编

     

    转载请注明来源:attilax的专栏  http://blog.csdn.net/attilax

    http://www.cnblogs.com/attilax/

    --Atiend  v9

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-22 23:04 , Processed in 0.063337 second(s), 28 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表