JDBC_Transaction_Processing

本文通过两个Java类的实现,展示了如何使用Java JDBC进行转账业务的处理,包括使用commit和savepoint来确保事务的完整性和一致性。具体实现了转账功能,并在出现异常时回滚到上一个保存点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    1. Commit

 

    Class UtiDb

    Class BusPro

package JavaJDBC.Chap09.sec01;

import JavaJDBC.util.UtiDb;

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

/**
 * Created by linux_ccmj on 16-5-17.
 */
public class BusPro {
    // UtiDb
    private static UtiDb utiDb = new UtiDb();
    // Out account fun
    private static void outAccFun(Connection con, String accNam, int accNum) throws Exception{
        // sql command string
        String strComSql = "update t_account set accountBalance = accountBalance-? where accountName =?";
        // prepared statement
        PreparedStatement preSta = con.prepareStatement(strComSql);
        preSta.setInt(1, accNum);
        preSta.setString(2, accNam);
        preSta.executeUpdate();
        // close prepared statement
        preSta.close();
    }

    // In account fun
    private static void inAccFun(Connection con, String accNam, int accNum) throws Exception{
        // sql command string
        String strComSql = "update t_account set accountBalance = accountBalance+? where accountName =?";
        // prepared statement
        PreparedStatement preSta = con.prepareStatement(strComSql);
        preSta.setInt(1, accNum);
        preSta.setString(2, accNam);
        preSta.executeUpdate();
        // close prepared statement
        preSta.close();
    }

    // Test main
    public static void main(String[] args){
        // Connection
        Connection con = null;
        try {
            con = utiDb.getConFun();
            con.setAutoCommit(false);
            // Out and in fun
            outAccFun(con, "张三", 500);
            System.out.println("张三转出500");
            inAccFun(con, "李四", 500);
            System.out.println("李四转入500");
            // Close connection
        } catch (Exception e) {
            try {
                con.rollback();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        finally {
            try {
                con.commit();
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

 

 

    2. Save Point

 

    Class UtiDb

    Class BusPro_SetPoi

package JavaJDBC.Chap09.sec02;
 
 import JavaJDBC.util.UtiDb;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.Savepoint;
 
 /**
  * Created by linux_ccmj on 16-5-17.
  */
 public class BusPro_SetPoi {
     // UtiDb
     private static UtiDb utiDb = new UtiDb();
     // Out account fun
     private static void outAccFun(Connection con, String accNam, int accNum) throws Exception{
         // sql command string
         String strComSql = "update t_account set accountBalance = accountBalance-? where accountName =?";
         // prepared statement
         PreparedStatement preSta = con.prepareStatement(strComSql);
         preSta.setInt(1, accNum);
         preSta.setString(2, accNam);
         preSta.executeUpdate();
         // close prepared statement
         preSta.close();
     }
 
     // In account fun
     private static void inAccFun(Connection con, String accNam, int accNum) throws Exception{
         // sql command string
         String strComSql = "update t_account set accountBalance = accountBalance+? where accountName =?";
         // prepared statement
         PreparedStatement preSta = con.prepareStatement(strComSql);
         preSta.setInt(1, accNum);
         preSta.setString(2, accNam);
         preSta.executeUpdate();
         // close prepared statement
         preSta.close();
     }
 
     // Test main
     public static void main(String[] args){
         // Connection
         Connection con = null;
         Savepoint savPoi = null;
         try {
             con = utiDb.getConFun();
             con.setAutoCommit(false);
             // Out and in fun
             outAccFun(con, "张三", 500);
             savPoi=con.setSavepoint();      // Set save point
             System.out.println("张三转出500");
             inAccFun(con, "李四", 500);
             System.out.println("李四转入500");
             // Close connection
         } catch (Exception e) {
             try {
                 con.rollback(savPoi);       // If there is exception, it roll back at save point
             } catch (Exception e1) {
                 e1.printStackTrace();
             }
             e.printStackTrace();
         }
         finally {
             try {
                 con.commit();
                 con.close();
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
 }

 

 

转载于:https://my.oschina.net/u/2363350/blog/682321

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值