我们在使用try catch捕获异常时,要注意异常类型,类型错误会导致捕获不到。
例如这段代码:
public static void main(String[] arg) {
checkDataScript(2, "select * from { table1 }");
}
/**
* 校验sql语法是否正确
*
* @param type 类型 0:查询,1:新增,2:更新,3:删除
*/
public static String checkDataScript(Integer type, String sqlContent) {
String msg;
try {
Statement parse = CCJSqlParserUtil.parse(sqlContent);
switch (type) {
case 3:
msg = (parse instanceof Delete) ? "" : "执行脚本不是delete语句";
break;
case 2:
msg = (parse instanceof Update) ? "" : "执行脚本不是update语句";
break;
case 1:
msg = (parse instanceof Insert) ? "" : "执行脚本不是insert语句";
break;
default:
msg = (parse instanceof Select) ? "" : "执行脚本不是select语句";
break;
}
} catch (Exception e) {
System.out.println("sql校验异常");
e.printStackTrace();
msg = "执行脚本语句语法错误";
}
System.out.println(String.format("msg:%s", msg));
return msg;
}
执行结果:
因为TokenMgrError异常不是Exception的子类,导致异常并未被捕获到。
异常类关系:
我们这里将异常类型改为Throwable
执行结果:
捕获到了异常。