zoukankan      html  css  js  c++  java
  • JDBC使用事务

    JDBC使用事务

    JDBC设置事务隔离级别

    JDBC中通过Connection提供的方法设置事务隔离级别:

    Connection.setTransactionIsolation(int level)
    

    leve参数可选值如下:

    Connection.TRANSACTION_READ_UNCOMMITTED 1(读未提交数据)
    Connection.TRANSACTION_READ_COMMITTED 2(读已提交数据)
    Connection.TRANSACTION_REPEATABLE_READ 4(可重复读)
    Connection.TRANSACTION_SERIALIZABLE 8(串行化)
    Connection.TRANSACTION_NONE 0(不使用事务)
    

    提示:在开发中,一般情况下不需要修改事务隔离级别

    模板(方法)

    ...
    conn.setAutoCommit(false); 关闭自动提交, 默认打开事务
    ...执行多条SQL
    conn.commit(); // 手动提交
    ...
    
    // name是一个字符串, 是回滚点的名字, 这个方法返回一个SavePoint对象
    SavePoint point = conn.setSavepoint(name); // 设置回滚点
    conn.rollback(point); // 回滚, 参数是个SavePoint对象
    
    conn.rollback(); // 回滚到上次提交的状态
    

    案例

    案例用到了 JDBC工具类

    public class TestTx {
    	public static void main(String[] args) throws SQLException {
    	    Connection conn = null;
    	    Statement stat = null;
    	    ResultSet rs = null;
    	    try {
    	        //1.获取连接
    	        conn = JdbcUtil.getConn();
    	        //2.关闭JDBC自动提交事务(默认开启事务)
    	        conn.setAutoCommit(false);
    	        //3.获取传输器
    	        stat = conn.createStatement();
    	        /* ***** A给B转账100元 ***** */
    	        //4.A账户减去100元
    	        String sql = "update acc set money=money-100 where name='A'";
    	        stat.executeUpdate(sql);
    	        //int i = 1/0; // 让程序抛出异常,中断转账操作
    	        //5.B账户加上100元
    	        sql = "update acc set money=money+100 where name='B'";
    	        stat.executeUpdate(sql);   
    	        //6.手动提交事务
    	        conn.commit();
    	        System.out.println("转账成功!提交事务...");
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	        //一旦其中一个操作出错都将回滚,使两个操作都不成功
    	        conn.rollback();
    	        System.out.println("执行失败!回滚事务...");
    	    } finally{
    	        JdbcUtil.close(conn, stat, rs);
    	    }
    	}
    }
    
  • 相关阅读:
    base64这种编码的意义
    玩2k16
    http://riddle.arthurluk.net walkthrough
    sshfs
    其它技术名称解释
    解决Apache日志"internal dummy connection"方法
    Aliyun OSS Nginx proxy module(阿里云OSS Nginx 签名代理模块)
    php-imagick扩展
    phpinfo空白
    Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解
  • 原文地址:https://www.cnblogs.com/zpKang/p/13152335.html
Copyright © 2011-2022 走看看