DAO层的异常处理

DAO层的异常最好是让上一层知道,这样就可以使上一层知道出错是否还进行下一步操作.

首先看看我们的项目的架构:

Com.mengya.dao.innter接口层(只定义方法):

       public void addUser(User user);

    public User getUser(int userId);

    public User findUser(String loginName, String password);

    public void update(User user);

    public void delete(User user);

com.mengya.dao.imple DAO的实现

    public class UserDaoJdbcImpl implements UserDao {

    public void addUser(User user) {

       Connection conn = null;

       PreparedStatement ps = null;

       ResultSet rs = null;

       try {

           conn = JdbcUtils.getConnection();

           String sql = "insert into user(name,birthday, money) values (?,?,?) ";

           ps = conn.prepareStatement(sql);

           ps.setString(1, user.getName());

           ps.setDate(2, new java.sql.Date(user.getBirthday().getTime()));

           ps.setFloat(3, user.getMoney());

           ps.executeUpdate();

 

           rs = ps.getGeneratedKeys();

           if (rs.next())

              user.setId(rs.getInt(1));

       } catch (SQLException e) {

           throw new DaoException(e.getMessage(), e);

           //1,如果这里我们打印异常信息,那么上一层即业务逻辑层就不知道,

可能以为正常执行了.它可能会按照正确执行再执行下一步的操作.

               2,如果这里我们简单的throw e.那么我们的这个方法就要改成:

               public class UserDaoJdbcImpl implements UserDao throws

Exceiotn{},这也会导到我们的接口里的方法也要改成方法后面throw

SQLException如果我们的接口的实现也是SQL实现了,并且这里是

CheckException,在我们的业务逻辑层调用时也要用try...catch.

样的话就改动很大.

              所以在这里我们就要用RunctimeException了。上面的问题都可以解决。

                 第一,     如果有异常上层即业务逻辑层肯定知道.因为这样的话程序出错了.

                 第二,     不用修改我们定义好了的接口,RunctimeException可以try...catch也可以不.

                 第三,     在我们业务逻辑层调用的时候也不需要非要try...catch也可以选择不try...catch.

       } finally {

           JdbcUtils.free(rs, ps, conn);

       }

    }

    //其它方法就不写了...

}

自己定义的异常类,继承于RuntimeExceptin.也没有重写RuntimeException里面的方法,只是简单的一个继承而已.

public class DaoException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public DaoException() {

    }

    public DaoException(String message) {

       super(message);

    }

    public DaoException(Throwable cause) {

       super(cause);

    }

    public DaoException(String message, Throwable cause) {

       super(message, cause);

    }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值