事物? 模拟银行的转账业务!

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);}
        
    }
}
原文地址:https://www.cnblogs.com/ZXF6/p/10648527.html