`

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);

    }

}

分享到:
评论

相关推荐

    J2EE项目中统一异常处理源码

    J2EE项目中统一异常处理,14类异常的自定义分析,支持dao层异常原因的返回

    JDBC_DAO设计思想与搭建骨架, 结合Service层讲解DAO层的异常处理

    NULL 博文链接:https://royzhou1985.iteye.com/blog/341849

    Java异常介绍及Spring Boot统一异常处理

    Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...

    jdbc在DAO层实现事务

    自己写的一个java示例 该示例用jdbc与java事务来实现DAO层的各个DAO的各方法之间的事务关联 使上层可以保证各数据访问的原子性 该示例包含了一个方便调用的数据库访问工具类,该工具类实现了调用SQL语句,调用...

    使用jdbc在DAO层实现了各DAO之间共享事务的示例

    自己写的一个java示例 该示例用jdbc与java事务来实现DAO层的各个DAO的各方法之间的事务关联 使上层可以保证各数据访问的原子性 该示例包含了一个方便调用的数据库访问工具类,该工具类实现了调用SQL语句,调用...

    基于Struts的异常处理

    通过定义继承RuntimeException的异常类及继承ExceptionHandler的异常处理类,手动从dao层捕获异常。非常实用!

    Java Web项目整体异常处理机制

     出来工作一年时间了,我也大概对异常处理有了一些了解,在这呢小弟简单介绍下个人对异常处理的见解,抛砖引玉,希望各位大神提出宝贵的意见和建议。  拿spring+struts2+hibernate项目说明:通常一个页面请求到...

    本科毕业设计+基于Springboot+JPA+semantic开发的个人博客系统

    项目知识详解: 整体项目基于springboot框架开发 数据库采用了mysql 以及 JPA 实现对数据库的链接 ...依次是javabean,配置类,contrler层,dao层,实体类,异常定义,异常处理,拦截类,service层,工具类

    DAO编程模式

     Sullivan从三个方面讨论DAO编程的结构特征:事务划分,异常处理,日志记录.在最近的18个月,我和一个优秀的软件开发团队一起工作,开发定制基于WEB的供应链管理应用程序.我们的应用程序访问广泛的持久层数据,包括出货...

    SpringBoot全局错误处理的两种方式:注解法和覆盖路径法

    对于系统中的异常处理是一个大问题,需要考虑几个问题,文后回答 代码中的异常什么时候该抛,什么时候该捕获 系统内部的异常应该在什么位置捕获,controller,service还是dao层 异常应该怎么处理,捕获到异常后应该...

    基于SpringBoot 的图书管理系统

    基于SpringBoot 的图书管理系统,主要包括系统管理、图书管理、借阅者管理三部分 项目结构的一些简单说明...│ │ │ ├─exception 全局统一异常处理 │ │ │ ├─interceptor 过滤接口 等等可以看主要文章有具体展示

    MVC设计思想 用户登陆注册注销

    如果一个异常抛给上一层会增加程序的耦合性,请当场解决:如将xml解析错误抛给service层,那么当换成mysqldao时,还需要修改service去掉xml解析异常的处理 如果上一层明确需要此异常进行代码的流转,请抛出:如当...

    Java一键生成代码到controller层【源码】

    适合人群 1、具备一定Java编程基础。 2、对springboot,spring,mybatis,mybatis ...4、本项目集成了spring,aop,mybatis plus,swagger2,异常处理,分页,freemarker等多种技术。 5、操作手册参见项目中的README.md文件

    基于mapper插件编写的可定制代码生成基本框架(springboot)

    统一异常处理 统一接口登录认证 常用基础方法抽象封装 Controller、service、dao层基类抽取。 常用工具类集成 使用FastJsonHttpMessageConverter,提高JSON序列化速度 集成MyBatis、通用Mapper插件、...

    基于Spring Boot的SSMP整合案例

    实体类开发——使用Lombok快速制作实体类 Dao开发——整合MyBatisPlus,制作数据层测试类 Service开发——基于MyBatisPlus进行增量...项目异常处理 按条件查询——页面功能调整、Controller修正功能、Service修正功能

    Hutuzhang-master.zip

    涉及到如下内容: 基础内容: ...单例模式,面板类与监听器类松耦合,Entity层设计,DAO层设计,Service层设计 业务常见处理手法: CRUD操作,配置信息,配置信息初始化,报表生成,一对多关系,多对一关系

    spring4.3.2参考文档(英文)

    Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接...

    第24次课-1 Spring与Hibernate的整合

    不再强制开发者在持久层捕捉异常,持久层异常被包装成DataAccessException,底层数据库异常包装成业务异常。开发者可以自己决定在合适的层处理。 HibernateTemplate支持类。可以完成大量Hibernate持久层的操作。 ...

    一本糊涂账-基于Swing和JDBC开发的图形界面桌面应用

    本项目是基于Swing和JDBC开发的图形界面...单例模式,面板类与监听器类松耦合,Entity层设计,DAO层设计,Service层设计 业务常见处理手法: CRUD操作,配置信息,配置信息初始化,报表生成,一对多关系,多对一关系

Global site tag (gtag.js) - Google Analytics