eclipse中自己写DAO层接口实现时,eclipse会提示未捕获SQL异常,因此不得不在每个方法后面加上throws SQLException ,这样的话service,action层中方法都要throws SQLException ,这样太麻烦了,有没有一个集中处理异常的方法呢?求大神指教!package com.daoImpl;import java.sql.SQLException;
import java.util.List;import com.dao.SysUserDao;
import com.entity.SysUser;
import com.ibatis.sqlmap.client.SqlMapClient;public class SysUserDaoImpl implements SysUserDao { private SqlMapClient sqlMapClient; public SqlMapClient getSqlMapClient() {
return sqlMapClient;
} public void deleteSysUser(SysUser sysUser) throws SQLException {
sqlMapClient.queryForObject("deleteSysUser", sysUser);
} @SuppressWarnings("unchecked")
public List<SysUser> getSysUserList(SysUser sysUser) throws SQLException {
return (List<SysUser>) sqlMapClient.queryForObject("getSysUserList",sysUser);
} public void insertSysUser(SysUser sysUser) throws SQLException {
sqlMapClient.queryForObject("insertSysUser", sysUser);
} public void updateSysUser(SysUser sysUser) throws SQLException {
sqlMapClient.queryForObject("updateSysUser", sysUser);
}}

解决方案 »

  1.   

    DAO层抛出异常,service和action调用此DAO时,如果不catch或者继续throws到上层的话,编译能通过吗?如果不出问题还好,要是出了问题,没有异常信息,怎么定位原因?调用谁就要用谁的规则,是懒得写,还是觉得这样写没必要呢?
      

  2.   

    使用hibernate 就不用这么抛了
      

  3.   

    不是说不捕获异常,像这样每个方法后面都throws SQLException 或者每个方法体内都try,catch,是不是显得太麻烦了,我想问怎样把dao层处理异常封装一下,然后继承这个dao.
      

  4.   

    一直用ibatis,没用过hibernate 
      

  5.   

    @楼主,我只是想表达一下每个方法throws或者try,catch的必要性。和麻烦不麻烦没关系,语法就是这样回过头来看你提的问题。DAO层异常集中处理,“集中处理”应该是越往上层才越有必要,越往底层越要细分。对于整个应用来说,DAO层算是比较底层的东西。为什么要在这一层“集中”处理呢。感觉有点怪怪的
      

  6.   

    嗯,怎么说呢?在公司,我们用的都是公司封装好的东西,DAO层直接继承就可以了,这个时候在eclipse中写方法就不用throws或try,catch,因为它已经帮你封装好了。但是如果我自己在dao层写方法,没有继承其他类,这个时候eclipse就会提示未捕获的sql异常了。当然,异常是要catch的,不过话又说回来,如果您自己写dao,不可能在每个方法后面都加上throws SQLException吧?我想表达的意思是有没有一种实现方法能对dao层的sql异常进行处理,从而方法的后面不再加throws SQLException,因为dao层不加throws SQLException,eclipse会报错。
      

  7.   

        public void updateSysUser(SysUser sysUser)  {
    try{
            sqlMapClient.queryForObject("updateSysUser", sysUser);
    }catch(SQLException e){
      throw new RuntimeExcption(e)
    }
        }
      

  8.   

    因为ibatIS是直接使用sql进行数据库操作,故一定是要抛出SQLException,要么throws,要么try catch 
    hibernate是对持久化操作进行了简单包装,将异常包进去,我们才看不见的。同理你在dao层方法中使用try catch,在service层调它的时候不也看不见它抛出异常么
      

  9.   

    @楼主,如8楼代码所示。所谓的你公司封装好的东西。无非是他自己在类中进行了try,catch操作(catch块中不再继续往上throw)。这样即使封装好的东西如果抛了异常,你也无法在上层中获取到。纠结这个干什么
      

  10.   

    换mybatis吧 和ibatis没什么差别
    dao里面就是不用抛异常
    @Repository("coprMoudleDao")
    public class CoprMoudleDao extends BaseDao<CoprMoudle,Integer> { @Override
    public Class getEntityClass() {
    return CoprMoudle.class;
    } public Integer checkExistById(CoprMoudle cm) {
    return this.selectCount("CoprMoudle.checkExistById", cm);
    }

    public Integer checkExistByName(CoprMoudle cm) {
    return this.selectCount("CoprMoudle.checkExistByName", cm);
    } public void updateById(CoprMoudle cm) {
    this.update("CoprMoudle.updateById", cm);
    } public void updateByName(CoprMoudle cm) {
    this.update("CoprMoudle.updateByName", cm);
    }}
      

  11.   

    需要集中处理异常的地方可以用Spring的AOP技术去实现一下试试