异常捕获真实情况案例分析: 首先场景是这样的,有一个表比如是用户表,用户表的用户名字段加上了唯一索引,防止在并发情况下出现多个用户名为同样的,在业务层执行插入时候我们进行异常捕获,捕获底层抛出唯一索引的错误 代码:

try {

int insert = baseMapper.insert(userBean);

if (insert == 0) {

return "插入失败";

}

}catch (Exception ee) {

ee.printStackTrace();

}

异常打印信息:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1213' for key 'username'

这里我们看到MySQLIntegrityConstraintViolationException这个异常类,我们把这个类进行catch试下,结果提示  说不会在try块中进行抛出,也就捕获不了,下面是解决方案: 由于spring框架有帮我们做底层异常的处理封装,这时候我们不知道到底哪个类用来catch,这是非常蛋疼的问题!!!! 去看spring文档,了解下spring的异常处理类到底有哪些?不不不不!不能这样!!!

这时候我们用反射来解决: 用到了getClass和getName getClass:获取运行类 getName:获取当前类的路径

try {

int insert = baseMapper.insert(userBean);

if (insert == 0) {

return "插入失败";

}

} catch (Exception ee) {

String name = ee.getClass().getName();

System.out.println(name);

}

我们再一次测试,控制台打印:

org.springframework.dao.DuplicateKeyException

嗯,这就是spring在底层抛出的真实类,我们用这个类进行catch

try {

int insert = baseMapper.insert(userBean);

if (insert == 0) {

return "插入失败";

}

}catch (DuplicateKeyException ee) {

return "插入失败。。。已经有了这个用户";

}

这个方法就能轻松的帮我们找出抛出异常到底是哪个“家伙”了,进行相应的处理!

java在底层捕获异常_Java正确捕获异常的真实类相关推荐

  1. java语言sql接口_java.sql包中的类和接口及其使用

    java.sql包提供使用Java编程语言访问并处理存储在数据源中数据的API,可以动态地安装不同驱动程序来访问不同数据源. 下面,详解java.sql包中包含的常用的接口和类 1.DriverMan ...

  2. java nio底层实现_Java NIO 底层原理

    一.概念说明 1.内核态(内核空间)和用户态(用户空间)的区别和联系? 用户空间是用户进程所在的内存区域,系统空间是操作系统所在的内存区域.为了保证内核的安全,处于用户态的程序只能访问用户空间,而处于 ...

  3. java阅读doc文件格式_java – 正确区分.xls和.doc文件的方法?

    .doc / .xls文档都可以以OLE2存储格式存储. org.apache.poi.poifs.filesystem.FileMagic可以帮助您仅检测文件存储格式,而不仅仅是为了区分.doc / ...

  4. java list底层实现_java中linkedlist的底层实现

    详情请看上面的文章,以下是我的简单总结: 1.linkedlist可序列化.可克隆.可做队列和双端队列使用 2.linkedlist的底层实现是双向循环链表 3.linkedlist有两个私有属性,一 ...

  5. java对象生命周期_Java对象生命周期和类生命周期

    原标题:Java对象生命周期和类生命周期 作者:彭空空 链接:https://www.jianshu.com/p/25ea857ba78b 导读 对象的生命周期 类的加载机制 类的生命周期 类加载器 ...

  6. java unsafe 详解_Java CAS操作与Unsafe类详解

    一.复习 计算机内存模型,synchronized和volatile关键字简介 二.两者对比 sychronized和volatile都解决了内存可见性问题 不同点: (1)前者是独占锁,并且存在者上 ...

  7. java 日期处理 口诀_java时间处理常用方法工具类

    java时间处理常用方法工具类 . import java.io.PrintStream; 2 import java.sql.Time; 3 import java.sql.Timestamp; 4 ...

  8. Java常用API例子_Java常用API及Math类

    一.API的概述 API--Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...

  9. java操作文件爱女_Java的IO操作---File类

    目标 1)掌握File类作用 2)可以使用file类中方法对文件进行读写操作. File类 唯一与文件有关的类.使用file类可进行创建或删除操作,要想使用File类,首先观察File类的构造方法. ...

最新文章

  1. GCC 同时编译多个 C/C++ 文件
  2. 怎么这一个c语言的dll文件,如何在C中获取DLL文件的版本信息
  3. 5、Dcoker 容器数据卷用-v命令添加
  4. 类加载器源码、双亲委派、自定义类加载器详解
  5. R7-4 检查密码 (15 分)
  6. 【C语言】编译预处理和宏(附带##介绍)
  7. Python使用标准库itertools中count类求解数苹果问题
  8. OpenGL基础54:点光源阴影
  9. ae运动模糊插件安装教程_AEPR运动模糊插件(RSMB) REVisionFX ReelSmart Motion Blur Pro v4.2.3...
  10. chrome误删书签恢复
  11. 【MySQL 09】安装mysql时出现:需要这两个包perl(Data::Dumper),perl(JSON)
  12. 在线生成网站地图工具SiteMap
  13. 2020年中国环博会|2020环博会|第21届中国环博会参展商名单(第2批)“加速”出炉!
  14. 网络攻防技术(郑大信安个人总结版)
  15. 如何两个电脑共享文件实现多人编辑_怎么才能几台电脑同时编辑共享的同一word文档...
  16. 记一次.Net Core通过GDI+在CentOS 7(Docker)环境中绘图报错The type initializer for ‘Gdip‘ threw an exception的问题及处理方式
  17. 原生js实现播放器操作(随机播放、上/下一首、播放/暂停)
  18. 10 个国外顶尖的 lowcode 开发平台
  19. js实现飞机大战小游戏
  20. 在文件夹中快速打开命令行

热门文章

  1. latex 插入表格_【2020.11.30】IEEE trans英文latex写作心得和学习历程
  2. ueditor 上传路径 Php_v9切换ueditor后图片上传路径问题 改成绝对路径
  3. mysql数据库产生的背景_MySql路途之mysql背景
  4. FFT分析的加窗和重叠
  5. 最近对焦距离与最大放大倍率
  6. 又见The request sent by the client was syntactically incorrect ()
  7. 【BZOJ 1951】 [Sdoi2010]古代猪文
  8. ASMSupport教程4.7 生成关系运算符
  9. 两个类相互包含对方成员的问题(2)
  10. 【转载】oracle normal、sys、system、sysdba、sysoperdba的区别