标签: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); } }
标签:oracle tar exec except 一个 logs tab 修改 jdbc
原文地址:http://www.cnblogs.com/wangyinxu/p/7428195.html