如何捕获特定异常JDBC http://en.wikipedia.org/wiki/Java_Database_Connectivity?示例:主键异常或外键异常。
最好的且独立于数据库的处理方式SQLException
更具体地说,是确定SQL状态代码,可以通过以下方式获得SQLException#getSQLState() http://java.sun.com/javase/6/docs/api/java/sql/SQLException.html#getSQLState%28%29。 SQLState 是一个 5 字符代码,其中前两个在所有数据库中通用,后三个可能因数据库和/或特定条件而异。这是摘录自spec http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt:
- 02:无数据
- 07:动态SQL错误
- 08:连接异常
- 0A:不支持该功能
- 21:基数违规
- 22:数据异常
- 23:违反完整性约束
- 24:无效的光标状态
- 25:无效交易状态
- 26:无效的SQL语句名称
- 28:无效的授权规范
- 2B:依赖特权描述符仍然存在
- 2C:无效的字符集名称
- 2D:无效交易终止
- 2E:连接名称无效
- 33:无效的 SQL 描述符名称
- 34:无效的游标名称
- 35:无效的条件号
- 3C:游标名称不明确
- 3D:目录名称无效
- 3F:模式名称无效
因此,要确定 SQL 异常是否是由违反约束引起的,您可以在(虚构的)中执行以下操作SQLUtil
class:
public static boolean isConstraintViolation(SQLException e) {
return e.getSQLState().startsWith("23");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)