1. 程式人生 > 實用技巧 >8.24 事務處理

8.24 事務處理

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

import com.gem.demo.util.JDBCUtil;

/**
 *
 * Title: Demo03
 *
 * Description: 
 * JDBC事務
 * @version v0.01
 *
 * @author ByChai
 *
 * @date 2020年8月24日 下午2:23:25
 *
 *
 */
public class Demo03 {
        
public static void main(String[] args) { Connection conn=null; PreparedStatement psmt=null; try { conn=JDBCUtil.getConnection(); //取消事務自動提交 conn.setAutoCommit(false); //轉賬 賬戶1-->賬戶2 轉賬500 String sql="update account set balance=balance-? where username=? and pwd=?"; psmt
=conn.prepareStatement(sql); //賬戶1 甲賬戶 扣款500 psmt.setDouble(1, 500); psmt.setString(2, "10001"); psmt.setString(3, "123456"); psmt.executeUpdate(); //模擬災難發生 zainanlailing();
//賬戶2 乙賬戶 收到500 psmt.setDouble(1, -500); psmt.setString(2, "10002"); psmt.setString(3, "123123"); psmt.executeUpdate(); //提交事務 conn.commit(); } catch (Exception e) { if(conn!=null) { try { //事務回滾 Connection conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } public static void zainanlailing() { //獲取當前秒數 Calendar c=Calendar.getInstance(); //如果當前時間秒數>30 表示有災難發生 拋異常 throw int second=c.get(Calendar.SECOND); if(second>30) { //觸發異常 System.out.println("有異常"); throw new RuntimeException("災難降臨。。。"); } } }

事務處理