我们在使用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
执行结果:

捕获到了异常。
文章讨论了在Java中,由于TokenMgrError异常不是Exception的子类,导致在try-catch块中没有被捕获到的问题。通过将异常类型改为Throwable,解决了异常的捕获问题。主要内容涉及SQL语句的语法检查和异常管理。
845

被折叠的 条评论
为什么被折叠?



