微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java MySQL JDBC--6

事务:

ACID原则

原子性:要么全部完成,要么都不完成

一致性:总数不变

隔离性:多个进程互不干扰

持久性:一旦提交不可逆,持久化到数据库

隔离性问题:

脏读:一个事务读取了另一个没有提交的事务

不可重复读:在同一个事务内,重复读取表中的数据,表数据发生了改变

虚读(幻读):在一个事务内,读取到了别人插入的数据,导致前后读出来的结果不一致

代码分析:

public class TestTransaction {
    public static void main(String[] args) {

        Connection conn = null;
        PreparedStatement st= null;
        ResultSet rs = null;
        try {
            conn = JdbcUtils.getConnection();
            // 关闭数据库自动提交功能, 自动会开启事务
            conn.setAutoCommit(false); // 开启事务

            String sql1 = "update account set money = money - 100 where name = 'A'";
            st = conn.prepareStatement(sql1);
            st.executeUpdate();

            String sql2 = "update account set money = money + 100 where name = 'B'";
            st = conn.prepareStatement(sql2);
            st.executeUpdate();

            // 业务完毕,提交事务
            conn.commit();
            System.out.println("成功");

        } catch (sqlException e) {
            try {
                conn.rollback();  //如果失败 则回滚事务
            } catch (sqlException ex) {
                throw new RuntimeException(ex);
            }
            throw new RuntimeException(e);
        } finally {
            JdbcUtils.release(conn, st, rs);
        }
    }
}

原文地址:https://www.jb51.cc/wenti/3284666.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐