Java中写一个全局的异常捕获,mysql执行sql抛出异常后捕获,根据异常关键信息,选择对于的枚举进行返回异常信息,比如抛出“Data truncation:Data too long for column F_fbnr at row”异常则选择"数据过长,无法保存到某列"的功能该怎么写
时间: 2024-02-05 16:11:46 浏览: 117
在Java中,可以通过实现Thread.UncaughtExceptionHandler接口来实现全局异常捕获,同时可以通过try-catch语句来捕获Mysql执行SQL抛出的异常。以下是一个简单的示例代码:
```java
public class GlobalExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
//根据异常关键信息选择对应的枚举返回异常信息
if (e instanceof SQLException) {
SQLException sqlException = (SQLException) e;
String message = sqlException.getMessage();
if (message.contains("Data too long for column")) {
throw new MyException(MyErrorCode.DATA_TOO_LONG);
} else {
throw new MyException(MyErrorCode.DATABASE_ERROR);
}
} else {
throw new MyException(MyErrorCode.INTERNAL_ERROR);
}
}
}
```
其中,MyException是自定义的异常类,MyErrorCode是一个枚举类,用来表示不同的异常类型和对应的错误信息。在捕获到Mysql执行SQL抛出的异常后,根据异常信息中是否包含特定的关键字,来选择对应的枚举类型,并抛出MyException异常。上述代码中,如果异常信息中包含“Data too long for column”关键字,则抛出数据过长的异常,否则抛出数据库操作异常。
需要注意的是,为了使全局异常捕获生效,需要在程序入口处设置UncaughtExceptionHandler,例如:
```java
public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler(new GlobalExceptionHandler());
// ...
}
```
阅读全文