使用DBUtils完成事务处理功能

来源:互联网 发布:python有蚁群算法包吗 编辑:程序博客网 时间:2024/06/05 20:48

注意:

    DBUtils进行事务处理的原理,是在Service层获得连接,以保证事务处理过程中的Connection对象为同一个Connection。

Service层代码:

/**     * 事务管理方式:向下传递Connection。有侵入性。使用DBUtils     * 业务层事务管理转账的方法     * @param from     * @param to     * @param money     */    public void transfer(String from, String to, double money) {        //调用dao层        AccountDao accountDao = new AccountDao();        //方法一:因为必须保证连接为同一个连接,所以在业务层获得连接,再将连接传递到持久层,代码具有侵入性。        //DBUtils使用的方法        Connection conn = null;        try {            //获得连接            conn = C3P0Utils.getConnection();            //设置事务不自动提交            conn.setAutoCommit(false);            //调用持久层            accountDao.outMoney(conn,from,money);            //如果有异常            //int a = 1 / 0 ;            accountDao.inMoney(conn,to,money);            //提交事务,并安静的关闭连接            DbUtils.commitAndCloseQuietly(conn);        } catch (SQLException e) {            //有异常出现时,回滚事务,并安静的关闭连接            DbUtils.rollbackAndCloseQuietly(conn);            e.printStackTrace();        }    }

Dao层 代码:

public void outMoney(Connection conn, String from, double money) {        QueryRunner qr = new QueryRunner();        try {            String sql = "update account set money = money - ? where username = ?";            qr.update(conn, sql, money,from);        } catch (SQLException e) {            e.printStackTrace();        }     }    public void inMoney(Connection conn, String to, double money) {        QueryRunner qr = new QueryRunner();        try {            String sql = "update account set money = money + ? where username = ?";            qr.update(conn, sql, money,to);        } catch (SQLException e) {            e.printStackTrace();        }    }
原创粉丝点击