SpringMVC+Mybatis框架中SQL的异常处理
今天开发时候遇到一个问题,Mapper文件中的SQL,由于其中一个表少了个字段,但是查询语句中又恰好用到了这个字段,结果报了错,但是呢,日志输出时到了SQL那里就没了,没有把SQL的异常输出出来,拿了SQL到数据库执行才知道是标识符无效的错
原来的DAO层的代码如下:
public List<UserVo> queryUser(Map<String, String> params) ;
这样写呢,SQL的报错不能正常输出,日志执行到SQL那里就停了,就不容易看出来是哪里的问题,于是在DAO层文件里加了个异常的跑出,然后在service层把异常捕捉到
DAO层代码:
public List<UserVo> queryUser(Map<String, String> params) throws SQLException;
service层代码:
List<UserVo> list = null;
try {
list = userDao.queryUser(params);
} catch (SQLException e) {
logger.error("SQL执行出现异常。。。");
e.printStackTrace();
}
胸有成竹的去试了一下,结果,还是不行,这就很尴尬了啊,到底是哪里出问题了呢?然后查看日志发现,这个异常是这样:
org.springframework.jdbc.BadSqlGrammarException:
error querying database.Cause:java.sql.SQLSyntaxErrorException :ORA-00904 ::invalid identifier
虽说这个异常是SQL执行出错导致的,但是这个异常是Mybatis框架报的,所以我们不能用SQLException,于是换成了Exception,遂解决。
List<UserVo> list = null;
try {
list = userDao.queryUser(params);
} catch (Exception e) {
logger.error("SQL执行出现异常。。。");
e.printStackTrace();
}