package cn.zhouzhou; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; /*一、事物?---------------模拟银行的转账业务! * * 1.开启事物 * con01.setAutoCommit(false); * setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态。 * 2.获取preparedstateme 执行SQL语句 * 【?】 占位子节符 * 3.使用 preparedstatement 两次更新操作 * setDouble(int parameterIndex, double x) 将指定的参数设置为给定的Java double值。 setString(int parameterIndex, String x) 将指定的参数设置为给定的Java String值。 * 4.提交事物 * con01.commit(); * 使自上次提交/回滚以来所做的所有更改都将永久性, * 并释放此 Connection对象当前持有的任何数据库锁。 * * 5.事务回滚 * con01.rollback(); * 撤消在当前事务中所做的所有更改, * 并释放此 Connection对象当前持有的任何数据库锁。 6.关闭资源 finally{工具类存在硬编码问题.close(ps01, con01);} * * */ public class 事物 { public static void main(String[] args) { Connection con01=null; PreparedStatement ps01=null; //开启事物 try { con01=工具类存在硬编码问题.getConnection(); con01.setAutoCommit(false); //获取preparedstateme 执行SQL语句 String sql="update shop set price=price-? where name =?"; ps01=con01.prepareStatement(sql); //使用 preparedstatement 两次更新操作 ps01.setDouble(1, 1); ps01.setString(2, "a"); ps01.executeUpdate(); // System.out.println(111/0); String sql01="update shop set price=price+? wehere name=?"; ps01=con01.prepareStatement(sql01); ps01.setDouble(1, 2); ps01.setString( 2, "b"); ps01.execute(); //提交事务? con01.commit(); System.out.println("转账成功!"); } catch (SQLException e) { //事物回滚? try { con01.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } System.out.println("失败"); }finally{工具类存在硬编码问题.close(ps01, con01);} } }