JDBC 事务

在dos命令行操作oracle时 , 执行DML , 需要结束事务 (commit提交 或 rollback回退)
在JDBC中, 事务是自动提交的, 每执行一条DML语句, 事务就自动提交一次. 

我们可以通过JDBC的事务API , 开始事务的手动提交, 将多条DML语句看作一个整体, 要么一起成功, 要么一起失败.

JDBC事务操作格式:

注意:    开启事务的手动提交 ,是通过连接对象完成的. 
        某个数据连接对象的事务开启手动提交后, 这个连接对象的事务需要手动控制.  其他连接对象不受影响.

操作方法:
    1.    开始事务的手动提交:
            conn.setAutoCommit(boolean flag);
            参数含义:    true表示自动提交 . false表示手动提交.

    2.    提交事务:
            conn.commit();

    3.    回退事务:
            rollback();

事务案例:

    public class Demo {
    public static void main(String[] args) throws Exception {
        //1.    加载数据库的驱动
        Class.forName("oracle.jdbc.OracleDriver");
        //2.    获取数据库连接对象
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "123");
        //2.1    设置连接对象的事务 为 手动提交
        conn.setAutoCommit(false);
        //3.    开始描述逻辑
        System.out.println("金刚: 转账中...");
        //3.1    减少金刚账户的余额 500 | 3.1.1    预编译SQL执行环境
        PreparedStatement state = conn.prepareStatement("update user33 set money=500 where id=2");
        //3.1.2    执行SQL语句
        boolean success = state.executeUpdate()>0?true:false;
        if(success) {
            System.out.println("后台逻辑: 金刚余额减少完毕.");
            if(1==2) {
                conn.rollback();
                throw new RuntimeException("后台服务器... 停电了");
            }
            //3.2    增加豪杰账户的余额 500 
            //3.2.1    预编译SQL执行环境
            PreparedStatement state2 = conn.prepareStatement("update user33 set money=600 where id=1");
            //3.2.2    执行SQ语句
            boolean success2 = state2.executeUpdate()>0?true:false;
            if(success2) {
                System.out.println("后台逻辑: 豪杰余额增加完毕");
                conn.commit();
            }
            state2.close();
        }
        state.close();
    }
}


11月      Java

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!