• JDBC事务处理


    直接上下代码:

     1 package com.learn.jdbc.chap09;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.SQLException;
     6 
     7 import com.learn.jdbc.util.DbUtil;
     8 
     9 /**
    10  * JDBC事务处理-----转账实例
    11  * @author Administrator
    12  *
    13  */
    14 public class Demo1 {
    15     private static DbUtil dbUtil=new DbUtil();
    16     
    17     /**
    18      * 转出
    19      * @param con
    20      * @param accountName
    21      * @param amount
    22      * @throws Exception
    23      */
    24     private static void outAccount(Connection con,String accountName,Double amount) throws Exception{
    25         String sql="update sp_account set accountBalance=accountBalance-? where accountName=?";
    26         PreparedStatement pstmt = con.prepareStatement(sql);
    27         pstmt.setDouble(1, amount);
    28         pstmt.setString(2, accountName);
    29         pstmt.executeUpdate();
    30         
    31     }
    32     
    33     /**
    34      * 转入
    35      * @param con
    36      * @param accountName
    37      * @param amount
    38      * @throws Exception
    39      */
    40     private static void inAccount(Connection con,String accountName,Double amount) throws Exception{
    41         String sql="update sp_account set accountBalance=accountBalance+? where accountName=?";
    42         PreparedStatement pstmt = con.prepareStatement(sql);
    43         pstmt.setDouble(1, amount);
    44         pstmt.setString(2, accountName);
    45         pstmt.executeUpdate();
    46         
    47     }
    48     
    49     public static void main(String[] args) {
    50         Connection con=null;
    51         
    52         try {
    53             con = dbUtil.getCon();
    54             System.out.println("张三向李四转账");
    55             Double amount=500.00;
    56             outAccount(con,"张三",amount);
    57             inAccount(con,"李四",amount);
    58             System.out.println("转帐成功!");
    59         } catch (Exception e) {
    60             // TODO Auto-generated catch block
    61             e.printStackTrace();
    62         }finally{
    63             try {
    64                 con.close();
    65             } catch (SQLException e) {
    66                 // TODO Auto-generated catch block
    67                 e.printStackTrace();
    68             }
    69         }
    70         
    71         
    72         
    73         
    74         
    75         
    76     }
    77 }
     1 package com.learn.jdbc.chap09;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.SQLException;
     6 
     7 import com.learn.jdbc.util.DbUtil;
     8 
     9 /**
    10  * JDBC事务处理---转账失败,使用事务机制进行回滚
    11  * @author Administrator
    12  *
    13  */
    14 public class Demo2 {
    15     private static DbUtil dbUtil=new DbUtil();
    16     
    17     /**
    18      * 转出
    19      * @param con
    20      * @param accountName
    21      * @param amount
    22      * @throws Exception
    23      */
    24     private static void outAccount(Connection con,String accountName,Double amount) throws Exception{
    25         String sql="update sp_account set accountBalance=accountBalance-? where accountName=?";
    26         PreparedStatement pstmt = con.prepareStatement(sql);
    27         pstmt.setDouble(1, amount);
    28         pstmt.setString(2, accountName);
    29         pstmt.executeUpdate();
    30         
    31     }
    32     
    33     /**
    34      * 转入
    35      * @param con
    36      * @param accountName
    37      * @param amount
    38      * @throws Exception
    39      */
    40     private static void inAccount(Connection con,String accountName,Double amount) throws Exception{
    41         String sql="update sp_account set accountBalance1=accountBalance+? where accountName=?";
    42         PreparedStatement pstmt = con.prepareStatement(sql);
    43         pstmt.setDouble(1, amount);
    44         pstmt.setString(2, accountName);
    45         pstmt.executeUpdate();
    46         
    47     }
    48     
    49     public static void main(String[] args) {
    50         Connection con=null;
    51         
    52         try {
    53             con = dbUtil.getCon();
    54             con.setAutoCommit(false);  // 1. 取消自动提交--事务开始
    55             System.out.println("张三向李四转账");
    56             Double amount=500.00;
    57             outAccount(con,"张三",amount);
    58             inAccount(con,"李四",amount);
    59             System.out.println("转帐成功!");
    60         } catch (Exception e) {
    61             // TODO Auto-generated catch block
    62             try {
    63                 con.rollback(); // 2. 回滚--事务回滚
    64                 System.out.println("事务回滚!");
    65             } catch (SQLException e1) {
    66                 // TODO Auto-generated catch block
    67                 e1.printStackTrace();
    68             }
    69             e.printStackTrace();
    70         }finally{
    71             try {
    72                 con.commit(); // 3. 提交事务---事务结束
    73                 System.out.println("提交事务!"); // 注意:mysql的MyISAM模式不支持事务机制,要用事务,就用InnoDB
    74                 con.close();
    75             } catch (SQLException e) {
    76                 // TODO Auto-generated catch block
    77                 e.printStackTrace();
    78             }
    79         }
    80         
    81         
    82         
    83         
    84         
    85         
    86     }
    87 }
     1 package com.learn.jdbc.chap09;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.SQLException;
     6 import java.sql.Savepoint;
     7 
     8 import com.learn.jdbc.util.DbUtil;
     9 
    10 /**
    11  * JDBC事务处理---转账失败,使用事务机制进行回滚--设置事务保存点(注意:工作中不怎么使用保存点)
    12  * @author Administrator
    13  *
    14  */
    15 public class Demo3 {
    16     private static DbUtil dbUtil=new DbUtil();
    17     
    18     /**
    19      * 转出
    20      * @param con
    21      * @param accountName
    22      * @param amount
    23      * @throws Exception
    24      */
    25     private static void outAccount(Connection con,String accountName,Double amount) throws Exception{
    26         String sql="update sp_account set accountBalance=accountBalance-? where accountName=?";
    27         PreparedStatement pstmt = con.prepareStatement(sql);
    28         pstmt.setDouble(1, amount);
    29         pstmt.setString(2, accountName);
    30         pstmt.executeUpdate();
    31         
    32     }
    33     
    34     /**
    35      * 转入
    36      * @param con
    37      * @param accountName
    38      * @param amount
    39      * @throws Exception
    40      */
    41     private static void inAccount(Connection con,String accountName,Double amount) throws Exception{
    42         String sql="update sp_account set accountBalance1=accountBalance+? where accountName=?";
    43         PreparedStatement pstmt = con.prepareStatement(sql);
    44         pstmt.setDouble(1, amount);
    45         pstmt.setString(2, accountName);
    46         pstmt.executeUpdate();
    47         
    48     }
    49     
    50     public static void main(String[] args) {
    51         Connection con=null;
    52         Savepoint  sp=null;
    53         
    54         try {
    55             con = dbUtil.getCon();
    56             con.setAutoCommit(false);  // 1. 取消自动提交--事务开始
    57             System.out.println("张三向李四转账");
    58             Double amount=500.00;
    59             outAccount(con,"张三",amount);
    60             sp=con.setSavepoint();    // 2. 设置一个保存点
    61             inAccount(con,"李四",amount);
    62             System.out.println("转帐成功!");
    63         } catch (Exception e) {
    64             // TODO Auto-generated catch block
    65             try {
    66                 con.rollback(sp); // 3. 回滚--事务回滚到保存点
    67                 System.out.println("事务回滚!");
    68             } catch (SQLException e1) {
    69                 // TODO Auto-generated catch block
    70                 e1.printStackTrace();
    71             }
    72             e.printStackTrace();
    73         }finally{
    74             try {
    75                 con.commit(); // 4. 提交事务---事务结束
    76                 System.out.println("提交事务!"); // 注意:mysql的MyISAM模式不支持事务机制,要用事务,就用InnoDB
    77                 con.close();
    78             } catch (SQLException e) {
    79                 // TODO Auto-generated catch block
    80                 e.printStackTrace();
    81             }
    82         }
    83         
    84         
    85         
    86         
    87         
    88         
    89     }
    90 }
  • 相关阅读:
    切换到真正的最高权限 SYSTEM 账户界面
    javascript中replace的正则表达式语法
    微软系统漏洞_超长文件路径打造私人地盘
    JAVA控制台
    PowerPoint绘图笔不能用
    《JavaScript核心技术》
    Catch(...) C++中三个点
    XMLHttp连续调用SEND需要注意的问题
    Wscript中的事件机制
    JavaScript(JS)常用的正则表达式
  • 原文地址:https://www.cnblogs.com/eaglezb/p/6055352.html
Copyright © 2020-2023  润新知