码迷,mamicode.com
首页 > 数据库 > 详细

JDBC事务处理

时间:2017-08-25 15:50:03      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:oracle   tar   exec   except   一个   logs   tab   修改   jdbc   

package cn.code.demo;

import java.sql.Connection;
import java.sql.PreparedStatement;

public class AccountDao {
    /*
     * 修改指定用户余额
     * */
    //为了避免使用不同的Connection,所以采用传递链接的方式保证事物中使用同一个链接;
    public void updateBalance(Connection con,String username,double balance){
        try{
            String sql = "update account set balance=balance+? where name=?";
            PreparedStatement ps=con.prepareStatement(sql);
            ps.setDouble(1, balance);
            ps.setString(2, username);
            ps.executeUpdate();
        }catch(Exception e){throw new RuntimeException(e);}
    }
}

//根据上面提供的业务情景,完成事务处理

package cn.code.demo;
/*
 * 1、事物四大特性:
 * 原子性(不可再分割,不可能成功一半)
 * 隔离性(并发进行提交多个事物进行隔离)
 * 一致性(操作前后数据保持一致)
 * 持久性(一旦事物提交成功,事物中所有的数据操作都必须被持久化)
 * mysql中开启事物:
 * 开启事物:start tansaction;
 * 结束事物:commit;或rollback;
 * 事物并发问题:
 * 脏读:读取到一个事物未提交的数据。
 * 不可重复读:对同一条记录两次读取不一致,因为另一事物对该记录做了修改;
 * 幻读(虚读):对同一张表的两次查询不一致,以为另一事物插入了一条记录;
 * 四种隔离级别:
 * 串行化:serializable
 * 可重复读:repeatable(mysql) 不能处理幻读,防止脏读和不可重复读
 * 读已提交数据:read committed(oracle) 防止脏读,没有处理可重复度和幻读
 * 读未提交数据:read uncommitted 性能最好,但是可能出现事务并发问题,没有处理脏读、幻读、可重复读
 * 设置事物隔离级别con.setTrasactionisolation();
 * */
import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import cn.code.DBUtils1.DBUtils1;

/*
 * 
 * */
public class Demo1 {
    public void zhuanzhang(String from,String to,double money){
        //对事物操作必须使用Connection对象,那么必须保证同一个事物使用同一个Connection
        //
        Connection con = null;
        try{
            con =DBUtils1.getConnection();//获取了一个新连接
            con.setAutoCommit(false);
            AccountDao dao = new AccountDao();
            dao.updateBalance(con,from, -money);//减去金额,传递原有链接
            dao.updateBalance(con,to, money);//加上金额,传递原有链接
            con.commit();
        }catch(Exception e){
            try {
                con.rollback();
            } catch (SQLException e1) {
            }
        }
    }
    @Test
    public void test(){
        zhuanzhang("zs","ls",100);
    }
}

 

JDBC事务处理

标签:oracle   tar   exec   except   一个   logs   tab   修改   jdbc   

原文地址:http://www.cnblogs.com/wangyinxu/p/7428195.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!